比较Java中的两组对象

问题描述 投票:0回答:1

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

我想从里到外比较每个值,并捕获2个sortedSets之间的任何差异。我不想要确切的区别。我想知道是否有任何变化。我已经尝试了sortedSet1.equals(sortedSet2),但它死了不起作用,如果我在sortedSet中的另一个对象内部更改一个值,它没有捕捉到差异。我也试过了

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

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

非常感谢您的帮助。

java stream
1个回答
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)发生更改。那时订购和结构位置已损坏。对于树结构,树的部分变得不可访问,因为假设左子树小于节点的密钥,并且右子树应该具有大于节点密钥的节点。

© www.soinside.com 2019 - 2024. All rights reserved.