java - 比较 Java 中的两组对象

标签 java stream

我有两个排序集: sortedSet1(Object ,Object1 , Object2 , Object3 , Object4 )sortedSet2(Object ,Object1 , Object2 , Object3 , Object4 ) 。这些对象还有其他列表,其中包含对象。

我想从内到外比较每个值并捕获 2 个排序集之间的任何差异。我不想要确切的差异。我想看看是否有任何变化。我已经尝试过 sortedSet1.equals(sortedSet2) 但它不起作用,如果我更改排序集内另一个对象内的值,它不会捕获差异。我也尝试过

if (!sortedSet1.containsAll(sortedSet2)) {
    // do something 
} 

运气不好..我认为答案存在于流中,但我对它们的经验很少..

非常感谢您的帮助。

最佳答案

if i change a value inside another object inside the sortedSet it does not catch the difference

首先要找到差异,如下所示:

SortedSet<Object> common = new TreeSet<>(sortedSet1);
common.retainAll(sortedSet2);
SortedSet<Object> all = new TreeSet<>(sortedSet1);
all.addAll(sortedSet2);
SortedSet<Object> differences = new TreeSet<>(all);
differences.removeAll(common);

但是,一旦您提到更改对象,一旦进入集合,就会响起警报。

永远不应该更改值,以免其使用的键(hashCode 或此处的 Comparable)发生变化。这样,排序和结构位置就会被破坏。对于树结构,树的某些部分将变得不可访问,因为假定左子树小于节点的键,而右子树的节点应大于节点的键。

关于java - 比较 Java 中的两组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55017939/

相关文章:

java - 为什么 Java 在我的 Linux 服务器上使用这么多内存?

java - 运行时找不到 JDBC 类

java - 在Java中计算+2000万条记录的统计信息

C# 如何将流复制到 streamwriter

javascript - 替代 node.js 中的 through2-map [与 learnyounode 相关]

C: fscanf 不改变文件流

java - C++ 中传递的函数参数与 Java 中传递的函数参数

java - 谁能解释一下这里发生了什么 : "protected" modifier in java

java - 运行构建器时出错 'Java Builder' 负时间

javascript - 了解 Node Streams 的操作顺序