我的数据结构为
List<HashMap<Person, Address>>
我有一个列表,我从中获取Person和Address对象。在迭代完给定列表后,我需要合并每个Person的地址并获取
List<HashMap<Person1, Address1>>
List<HashMap<Person1, Address2>>
List<HashMap<Person2, Address3>>
到
List<HashMap<Person, List<Address>>>
有没有有效的方法来完成这项工作 - 可能采用不同的方法?或者迭代列表是唯一的选择。如果列表包含大量数据,那么处理它的最佳选择是什么?
答案 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;
}