合并两个列表(java 7)

时间:2017-03-29 08:55:38

标签: java list merge

我有两个Personne列表:listOnelistTwo

Personne是:

public class Personne{
    private String name;
    private Favorite favorite;
    private Collection<Number>  numbers;
}

public class Favorite{
    private String id;
    private String name;
    ...
}

对于每个项目,如果第一个列表的收藏夹名称和id等于第二个列表的收藏夹名称和ID,我想合并两个列表,然后将第二个列表合并到第一个列表。

这是我的治疗的一部分,我的意思是合并(它没有创建其他列表):

如果我的条件为真,我想把我的第一个清单列为项目:

item.setNumbers(item2.getnumbers);

使用Java 7执行此操作的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

我尝试迭代listOne,检查listTwo中的每个所需项目,并在这种情况下将listOne和listTwo中的条目添加到新列表中。

这样的东西

https://gist.github.com/a2465b03fb7503f9c8190ab72c328c10

答案 1 :(得分:0)

据我所知,我们希望获得一个包含两个列表的所有唯一元素的列表,而不会重复。

首先,让我们为ArrayList.contains()方法正常运行所需的类创建一个equals()方法:

class Favorite {
    ...
    private boolean equals(Favorite other) {
        int i = id.compareTo(other.id);
        if (i != 0) return false;

        return (name.compareTo(other.name) == 0);
    }

class Personnel {
    ...
    private boolean equals(Personnel other) {
        int i = name.compareTo(other.name);
        if (i != 0) return false;

        return favorite.equals(other.favorite); 
    }

由于无法保证输入列表已排序,我们可以编写如下合并方法:

    public List<Personnel> merge(List<Personnel> listOne, List<Personnel> listTwo) {
        List<Personnel> result = new ArrayList<>(listOne);

        for (Personnel p : listTwo) {
            if (!result.contains(p)) {
                result.add(p);
            }
        }

        return result;
    }