有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    如果想要的对象集合不包含重复项,则列表是错误的集合类型。你应该用一套。创建一个包含第一个列表中所有对象的新集合,然后添加第二个列表中的所有对象。重复的消除是自动的