合并List <hashmap <obj1,obj2 =“”>&gt;作为List <hashmap <ob1,list <obj2 =“”>&gt;&gt;以有效的方式?</hashmap <ob1,> </hashmap <obj1,>

时间:2013-06-30 17:35:45

标签: java list hashmap

我的数据结构为

List<HashMap<Person, Address>>

我有一个列表,我从中获取Person和Address对象。在迭代完给定列表后,我需要合并每个Person的地址并获取

List<HashMap<Person1, Address1>>
List<HashMap<Person1, Address2>>
List<HashMap<Person2, Address3>>

List<HashMap<Person, List<Address>>>

有没有有效的方法来完成这项工作 - 可能采用不同的方法?或者迭代列表是唯一的选择。如果列表包含大量数据,那么处理它的最佳选择是什么?

2 个答案:

答案 0 :(得分:2)

您可以使用Google Collections Multimap

    List<HashMap<Person, Address>> list = ...
    HashMultimap<Person, Address> mm = HashMultimap.create();
    for (HashMap<Person, Address> m : list) {
        for(Entry<Person, Address> e : m.entrySet()) {
            mm.put(e.getKey(), e.getValue());
        }
    }

请注意,它可以保存不带列表的人员及其地址

答案 1 :(得分:1)

您可以将地图列表转换为从Person到地址列表(设置?)的单个地图,如下所示:

Map<Person, List<Address>> restructure(List<Map<Person, Address>> data) {
    Map<Person, List<Address>> result = new HashMap<>();
    for (Map<Person, Address> map : data) {
        for (Map.Entry<Person, Address> entry : map.entrySet()) {
            List<Address> addresses = result.get(entry.getKey());
            if (addresses == null) {
                addresses = new LinkedList<>(); // or ArrayList, or ...
                result.put(p, addresses);
            }
            addresses.add(entry.getValue());
        }
    }
    return result;
}