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实现上面的代码吗? 感谢
答案 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类中重写这两个方法,这两种方法都不会起作用