java如何使用自定义比较器equals方法查找集合差异?
我想使用不同于类T
使用的相等度量来查找两个Set<T>
之间的差异,例如自定义Comparator<T>
例如,我有一个类Animal
,它通常使用Animal
的物种来测试相等性
public class Animal {
public String species;
public String genus;
public Animal(String species, String genus){
this.species = species;
this.genus = genus;
}
public boolean equals(Animal other){
return other.species.equals(this.species);
}
}
我有两个List<Animal>
,我想找到两个列表之间共享属的交集
通常,我会将List
转换为Set
,并使用^{
我想使用类似GenusComparator
的东西来定义交叉点的相等性
public class GenusComparator implements Comparator<Animal>{
@Override
public int compare(Animal animal1, Animal animal2) {
return String.CASE_INSENSITIVE_ORDER.compare(animal1.genus, animal2.genus);
}
}
这只是一个简单的例子来解释我试图做什么,而不是我的应用程序中的实际类
我发现了两种可能的解决方案:
- 包装该类并重写equals方法
- 将^{
} 与自定义比较器一起使用
到目前为止,我是否还错过了其他方法,这些解决方案可能有哪些优点和缺点
# 1 楼答案
最简单的方法是将
TreeSet
与GenusComparator
一起使用必须将这两个集合都转换为
TreeSet(GenusComparator)
,才能使retainAll()
正常工作我修正了
equals()
并添加了hashCode()
和toString()
输出