假设存在具有SomeField属性的SomeClass元素的集合。如何从此Collection中删除具有等效SomeField属性的重复元素,并仅保留具有该SomeField值的一个元素?
有几种简单的方法可以解决此问题。
如果该SomeField
值是唯一的成员SomeClass
,那么你可以很容易地覆盖hashCode
,并equals
在SomeClass
基础上SomeField
,然后只需将原来的集合添加到HashSet
。
如果不是这种情况,SomeClass
更复杂的话,您仍然可以使用Set
。但是,您需要以某种方式过滤掉重复项,一种不错的方法是将和Comparator
一起使用TreeSet
。
// Create a new Set with a specified comparator
final Collection<SomeClass> someClasses =
new TreeSet<>(Comparator.comparing(SomeClass::getSomeField));
// Add all elements from the original collection (duplicates will be removed)
someClasses.addAll(originalColl);
该Comparator.comparing
方法创建一个Comparator
。如果您不使用Java 8,那么Comparator
也可以使用非lambda :
Comparator<SomeClass> comparator = new Comparator<SomeClass>() {
@Override
public int compare(final SomeClass o1, final SomeClass o2) {
// Do some kind of compare-operation. If SomeField is
// Comparable you can do it this way:
return o1.getSomeField().compareTo(o2.getSomeField());
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句