我需要加入Java中的两个列表。我有一个列表,其中有一个具有名称和描述的VO。我还有另一个具有相同VO类型的列表,该列表具有名称和地址。 “名称”是相同的。我需要使用此VO创建一个具有名称,地址和描述的列表。
VO结构是
public class PersonDetails{
private String name;
private String description;
private String address;
//getters and setters
}
有人可以建议我使用最佳方法来实现它吗?
最佳答案
将第一个列表的所有元素放在地图中,然后将第二个列表的内容合并到其中:
final List<PersonDetails> listWithAddress =
new ArrayList<PersonDetails>();
final List<PersonDetails> listWithDescription =
new ArrayList<PersonDetails>();
// fill both lists with data
final Map<String, PersonDetails> map =
// map sorted by name, change to HashMap otherwise
// (or to LinkHashMap if you need to preserve the order)
new TreeMap<String, PersonDetails>();
for(final PersonDetails detailsWithAddress : listWithAddress){
map.put(detailsWithAddress.getName(), detailsWithAddress);
}
for(final PersonDetails detailsWithDescription : listWithDescription){
final PersonDetails retrieved =
map.get(detailsWithDescription.getName());
if(retrieved == null){
map.put(detailsWithDescription.getName(),
detailsWithDescription);
} else{
retrieved.setDescription(detailsWithDescription.getDescription());
}
}