2つのクラスリストを持っている場合は、それらを比較して順序にかかわらず同じかどうかを確認できます。Java:注文に関係なく2つのクラスリストを比較する
Class[] list1[class1, class1, class2]
Class[] list2[class2, class1, class1]
これらのリストは、順序に関係なく同じですが、どのようにjavaブール値を使用できますか?例えば
if(list1.sort == list2.sort){}
2つのクラスリストを持っている場合は、それらを比較して順序にかかわらず同じかどうかを確認できます。Java:注文に関係なく2つのクラスリストを比較する
Class[] list1[class1, class1, class2]
Class[] list2[class2, class1, class1]
これらのリストは、順序に関係なく同じですが、どのようにjavaブール値を使用できますか?例えば
if(list1.sort == list2.sort){}
最善の解決策は、Guava
を追加し、MultiSet
を使用するようになります。
HashMultiset<Class> hms1 = new HashMultiSet<>();
HashMultiset<Class> hms1 = new HashMultiSet<>();
for (Class c : list1) {
hms1.add(c);
}
for (Class c : list2) {
hms2.add(c);
}
if (hms1.equals(hms2) {
//lists are the same in your understanding of the same
}
簡単な解決策はMap<Class, Integer>
HashMap<Class, Integer> hm1 = new HashMap<>();
HashMap<Class, Integer> hm2 = new HashMap<>();
for (Class c : list1) {
if (!hm1.containsKey(c)) {
hm1.put(c, 1);
} else {
hm1.put(c, hm1.get(c)+1);
}
}
for (Class c : list2) {
if (!hm2.containsKey(c)) {
hm2.put(c, 1);
} else {
hm2.put(c, hm2.get(c)+1);
}
}
if (hm1.equals(hm2) {
//lists are the same in your understanding of the same
}
Class<?>[] list1 = new Class[] { String.class, String.class, Integer.class };
Class<?>[] list2 = new Class[] { Integer.class, String.class, String.class };
Comparator<Class<?>> classComparator = new Comparator<Class<?>>() {
@Override
public int compare(Class<?> o1, Class<?> o2) {
return o1.getCanonicalName().compareTo(o2.getCanonicalName());
}
};
Arrays.sort(list1, classComparator);
Arrays.sort(list2, classComparator);
if (Arrays.equals(list1, list2)) {
System.out.println("same regardless of order");
} else {
System.out.println("NOT same regardless of order");
}
上記プリント
same regardless of order
私は、元のリストを変更していますを使用することです。これが望ましくない場合は、最初にコピーを取ることをお勧めします。
Arrays.equals()
は、Class.equals()
を使用しています。順番は、Object.equals()
です。 ClassごとにClassオブジェクトが1つしかない限り、これは機能します。クラスローダを1つしか使用していない限り、これは当てはまると思います。だからここで少し微妙なことを警告してください。
クラスは '.getHashCode()'と '.equals()'を実装していますか? (あなたは文字通り 'Class'クラスを意味しますか?) – Ryan
' Class'が 'java.lang.Class'であると仮定すると、funnilyは' hashCode() 'も' equals() 'も実装しません。 –