[英]Java: Compare two class list regardless of order
如果您有“兩個班級”列表,則如何比較它們以查看它們是否相同,而不管順序如何。
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()
,而Class.equals()
則只是Object.equals()
。 只要每個類只有一個Class對象,這是可行的。 我相信只要您僅使用一個類加載器,這都是正確的。 因此請注意,這里有些微妙。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.