java - 如何使用 Comparator 接口(interface)减去集合而不是覆盖 equals

标签 java collections comparator

我想计算集合之间的差异。使用 CollectionUtils.subtract() 进行自定义比较时,我需要覆盖对象的 equals() 方法。但是,如果我需要比较类型相同但比较标准不同的对象集合怎么办? Comparator 接口(interface)怎么样,它似乎非常适合这里? AFAIK Comparator 主要用于排序。有没有使用比较器做减法的方法?

最佳答案

static <Type> Collection<Type> subtract(Collection<Type> a, Collection<Type> b, Comparator<Type> c) {
    Set<Type> subtrahend = new TreeSet<Type>(c);
    subtrahend.addAll(b);
    Collection<Type> result = new ArrayList<Type>();
    for (Type item: a) {
        if (!subtrahend.contains(item)) result.add(item);
    }
    return result;
}

subtrahent 树集不是必需的,但会提高大型 b 的性能。

关于java - 如何使用 Comparator 接口(interface)减去集合而不是覆盖 equals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7348054/

相关文章:

java - Java 中的集合排序

java - Java 运行时环境检测到 fatal error - .EXCEPTION_ACCESS_VIOLATION

java - 如何播放Environment.DIRECTORY_DOWNLOADS中的mp3文件

collections - 在Jekyll中,我们可以将多个集合分组到同一个文件夹中吗?

WPF 集合和数据绑定(bind)

java - Comparator 在内部使用哪种类型来比较值以及它如何调用其比较方法?

java - dex2jar 和 jd-GUI 的替代品?

java - 更新数据库时应用程序崩溃

java - 列表转数组的区别

java - Comparator.nullsLast 不会避免 NullPointerException