我需要加入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)
有人可以建议我实施它的最佳方法吗?
这取决于:
如果列表包含完全相同的数据,您可以按名称对它们进行排序,迭代它们以设置缺少的属性.
如果没有,我会将第一个列表放在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)
| 归档时间: |
|
| 查看次数: |
7340 次 |
| 最近记录: |