加入Java中的两个列表

App*_*pps 3 java list

我需要加入Java中的两个列表.我有一个列表,其中有一个名称和描述的VO.我有另一个列表,它具有相同的VO类型,具有名称和地址."名字"是一样的.我需要创建一个包含此VO的List,它包含名称,地址和描述.VO结构是

public class PersonDetails{
    private String name;
    private String description;
    private String address;
//getters and setters
}
Run Code Online (Sandbox Code Playgroud)

有人可以建议我实施它的最佳方法吗?

Cid*_*d54 5

这取决于:

如果列表包含完全相同的数据,您可以按名称对它们进行排序,迭代它们以设置缺少的属性.

如果没有,我会将第一个列表放在Map中,名称为key.然后迭代第二个列表,在地图中查找VO并设置值.之后,只需将所有值作为List再次从地图中获取.

public List<Vo> merge(List<Vo> list1, List<Vo> list2) {

    Map<String, Vo> tempMap = new HashMap<String, Vo>();

    for (Vo v : list1) {
        tempMap.put(v.name, v);
    }

    for (Vo vv : list2) {

        //The if is in case the 2 lists aren't filled with the same objects            
        if (tempMap.containsKey(vv.name)) {
            tempMap.get(vv.name).description = vv.description;
        } else {
            tempMap.put(vv.name, vv);
        }
    }

    return new ArrayList<Vo>(tempMap.values());

}
Run Code Online (Sandbox Code Playgroud)

如果列表包含EXACT相同的VO(名称相同),则可以使用此选项.

public List<Vo> merge(List<Vo> list1, List<Vo> list2) {

    Collections.sort(list1, new Comparator<Vo>() {

        public int compare(Vo o1, Vo o2) {
            return o1.name.compareTo(o2.name);
        }
    });

    Collections.sort(list2, new Comparator<Vo>() {

        public int compare(Vo o1, Vo o2) {
            return o1.name.compareTo(o2.name);
        }
    });

    for(int i = 0; i < list1.size(); i++){
        list1.get(i).description = list2.get(i).description;
    }

    return list1;

}
Run Code Online (Sandbox Code Playgroud)