Java 合并列表<;HashMap<;Obj1、Obj2>&燃气轮机;as列表<;HashMap<;Ob1,列表<;Obj2>&燃气轮机&燃气轮机;以有效的方式?

Java 合并列表<;HashMap<;Obj1、Obj2>&燃气轮机;as列表<;HashMap<;Ob1,列表<;Obj2>&燃气轮机&燃气轮机;以有效的方式?,java,list,hashmap,Java,List,Hashmap,我有一个数据结构 List<HashMap<Person, Address>> 列表 我有一个列表,可以从中获取Person和Address对象。在完成对给定列表的迭代之后,我需要合并每个人的地址,并获得如下内容 List<HashMap<Person1, Address1>> List<HashMap<Person1, Address2>> List<HashMap<Person2, Address3>

我有一个数据结构

List<HashMap<Person, Address>>
列表
我有一个列表,可以从中获取Person和Address对象。在完成对给定列表的迭代之后,我需要合并每个人的地址,并获得如下内容

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

列表

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

您可以使用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());
        }
    }
List=。。。
HashMultimap mm=HashMultimap.create();
for(HashMap m:list){
对于(条目e:m.entrySet()){
mm.put(e.getKey(),e.getValue());
}
}

请注意,它可以在没有列表的情况下保存人员及其地址。您可以将地图列表转换为单个地图,从
人员
转换为地址列表(集合?),如下所示:

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;
}
地图重组(列表数据){
映射结果=新的HashMap();
用于(地图:数据){
对于(Map.Entry:Map.entrySet()){
列表地址=result.get(entry.getKey());
如果(地址==null){
addresses=new LinkedList();//或ArrayList,或。。。
结果.put(p,地址);
}
address.add(entry.getValue());
}
}
返回结果;
}

迭代,设置一个标志和全部。但这没有帮助。我认为这只会使问题复杂化。用最明显的方式去做就行了。如果你有一个特别的问题,写另一个问题。使用列表而不是地图有什么好处?为什么要这样做?生成地图列表有什么意义?我不确定你想要实现什么样的转变。似乎一张地图就足以捕获所有数据。@TedHopp-我认为使用列表是一种过分的做法。如何根据我的要求合并映射?请注意,
HashMultimap
不包含重复的键值对-它更类似于
Map
。Spring还扩展了
Map
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;
}