在Collection中查找重复条目

10 java collections equality duplicates

是否有工具或库可根据可实施的特定标准在集合中查找重复条目?


为了使自己清楚:我想根据具体标准相互比较条目.所以我觉得Predicate回归只是true还是false不够.


我不能用equals.

Sam*_*lle 7

这取决于标准的语义:

如果你的标准始终是相同的给定类,并且是固有的基本概念,你应该实施equalshashCode并使用一组.

如果您的标准取决于上下文, org.apache.commons.collections.CollectionUtils.select(java.util.Collection,org.apache.commons.collections.Predicate)可能是适合您的解决方案.


小智 2

我创建了一个类似于.NETIEqualityComparer<T>中的界面的新界面。

然后我将这样的EqualityComparator<T>方法传递给以下检测重复项的方法。

public static <T> boolean hasDuplicates(Collection<T> collection,
        EqualsComparator<T> equalsComparator) {
    List<T> list = new ArrayList<>(collection);
    for (int i = 0; i < list.size(); i++) {
        T object1 = list.get(i);
        for (int j = (i + 1); j < list.size(); j++) {
            T object2 = list.get(j);
            if (object1 == object2
                    || equalsComparator.equals(object1, object2)) {
                return true;
            }
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

这样我就可以根据我的需要定制比较。