[英]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.