比较Java中的两组对象

时间:2019-03-06 07:42:53

标签: java stream

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

我想从内到外比较每个值,并捕获2个sortedSet之间的任何差异。我不希望有确切的区别。我想看看是否有任何变化。我已经尝试过sortedSet1.equals(sortedSet2),但是它死了,如果我在sortedSet内的另一个对象内更改一个值,它不会引起任何区别。我也尝试过

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

没有运气。.我认为答案存在于流中,但是我对它们的经验很少。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  

如果我在sortedSet内的另一个对象内更改值,则无法捕捉到差异

首先发现差异将是这样的:

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)更改。这样,顺序和结构位置就会损坏。对于树形结构,由于假定左子树小于节点的键,所以树的部分无法访问,而右子树的节点应大于节点的键。