我需要加入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());
    }
}

10-07 23:50