我有两个排序集: 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/