java如何在一个列表中聚合两个列表,而不使用重复项?
我有两个相同对象的列表,它们的id属性值不同,但这些项有其他相同的属性值(例如name属性)。
我想要的是将两个列表合并到一个列表中,其中不包含具有相同属性的重复项(除了id
)
我的物品样本:
A{
id:int
name:string
}
我想要实现它的方法:
public List<A> join(List<A> list1, List<A> list2){
return a list with aggregated items of list1 and list2(but not with duplicate items which have same property name value)
}
由于id属性值不同,我不能在Java中使用list.retainAll
方法或其他类似方法。(事实上,两个id不同的项并不相等,但我想拒绝id属性)
我写的代码是:
public List<Node> unionNodeList(List<Node> list1 , List<Node>list2) {
Set<Node> unionList = new HashSet<Node>();
Set<Node> temp = new HashSet<Node>();
for (Node t : list1) {
temp.add(t);
for (Node s : list2) {
if (!t.getPropertyValues().toString().equals(s.getPropertyValues().toString())) {
continue;
} else {
temp.remove(t);
}
}
unionList.addAll(temp);
temp.removeAll(list1);
}
unionList.addAll(list2);
List<Node> myNodes = new ArrayList<Node>(unionList);
return myNodes;
}
我的问题是,我可以使用什么样的最佳算法或模式来实现这一点
# 1 楼答案
如果想要的对象集合不包含重复项,则列表是错误的集合类型。你应该用一套。创建一个包含第一个列表中所有对象的新集合,然后添加第二个列表中的所有对象。重复的消除是自动的