Java比较两个List的对象值并在第三个列表中存储不常见的对象?

时间:2016-07-14 05:35:32

标签: java arraylist collections equals

ListA和ListB都包含TrackingBean对象,现在我必须比较列表的对象值这里的名称以及年龄变量

ListA = ["Raj",20],["Narayan",25],["Sree",32];

ListB = ["Raj",20],["Narayan",25],["Sree",32];

在上面的场景中,ListC大小将为零,因为两个列表都相同。

ListA = ["Raj",20],["Narayan",25],["Sree",32];

ListB = ["Sree",32],["Raj",20],["Narayan",25];

现在我也应该将ListC大小设为零。 以上情况与对象的顺序无关。

ListA = ["Raj",20],["Narayan",25],["Sree",32];

ListB = ["Sree",32],["Raj",20],["Narayan",25],["Srinivas",18];

在上面的场景中,ListC应该存储新对象:

ListC=["Srinivas",18];`enter code here` 

你能建议我用java实现上面的代码吗? 感谢

3 个答案:

答案 0 :(得分:1)

一个选项是从列表A和B创建两个集合。然后,您可以使用Set.removeAll()在集合A和B中查找每个集合唯一的元素。您的原始问题在这方面省略了信息,但每个集合可能有一个元素不会出现在另一个集合中。我的回答是所有不相交的元素的联合。如果您希望只有一个集合与另一个集合之间存在差异,则可以相应地进行修改。

Set<TrackingBean> sA = new HashSet<TrackingBean>(listA);
Set<TrackingBean> sB = new HashSet<TrackingBean>(listB);

Set<TrackingBean> diffA = sA.removeAll(sB);
Set<TrackingBean> diffB = sB.removeAll(sA);

Set<TrackingBean> diffTotal = new HashSet<TrackingBean>();
diffTotal.addAll(diffA);
diffTotal.addAll(diffB);

答案 1 :(得分:0)

您可以使用listA.retainAll(listB)并使用ArrayList

答案 2 :(得分:0)

我知道虽然我想在现有答案中添加一些内容,但已经给出了正确的答案

你可以使用@ Tim Biegeleisen

但请确保您已覆盖 equals() 方法和 hashCode() 方法 如果没有在bean类中重写这两个方法,这两种方法都不会起作用