-1

我有一个数据结构

List<HashMap<Person, Address>>

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

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

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

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

4

2 回答 2

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());
        }
    }

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

于 2013-06-30T17:52:24.910 回答
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;
}
于 2013-06-30T18:15:04.097 回答