转换地图<;整数,对象>;映射<;整数,列表<;对象>>;,不使用for循环(java)

转换地图<;整数,对象>;映射<;整数,列表<;对象>>;,不使用for循环(java),java,optimization,hashmap,Java,Optimization,Hashmap,正如标题所说,我目前正在实现下面的代码(很快就会实现),这是一种更好的方法——因为这似乎有点令人讨厌 Map<Integer, List<Objects>> allObjectsMap = newHashMap(); //guava for(int i=1:i<myVar:i++){ Map<Integer, Objects> eachObjectMap = getMyObjectMap(i); for(Map.Entry<

正如标题所说,我目前正在实现下面的代码(很快就会实现),这是一种更好的方法——因为这似乎有点令人讨厌

Map<Integer, List<Objects>> allObjectsMap = newHashMap(); //guava 

for(int i=1:i<myVar:i++){

    Map<Integer, Objects> eachObjectMap = getMyObjectMap(i); 

    for(Map.Entry<Integer, Object> entry:eachObjectMap.entrySet()){

        List objectList  = allObjectsMap.get(entry.getKey())

        if(objectList == null){//will be null the first time
           objectList = newArrayList();//guava
           objectList.add(entry.getValue());
           allObjectsMap.put(entry.getKey(),objectList); 
        }
        else{
           objectList.add(entry.getValue());
        }
    }
}
Map allObjectsMap=newHashMap()//番石榴

对于(int i=1:i您不能强制转换吗?Java会删除生成代码中的所有类型信息,所以应该足够了。

您不能强制转换吗?Java会删除生成代码中的所有类型信息,所以应该足够了。

您可以查看番石榴的

Multimap Multimap=ArrayListMultimap.create();
for(int i=0;i
这种方法的一个缺点是,最终结果的类型是
Map
,而不是
Map

虽然方法签名没有 明确地说,返回的映射 具有列表值


因此,一些浇铸序列(例如,
(Map)(Map)
)将起作用。

您可能希望查看番石榴的浇铸序列

Multimap Multimap=ArrayListMultimap.create();
for(int i=0;i
这种方法的一个缺点是,最终结果的类型是
Map
,而不是
Map

虽然方法签名没有 明确地说,返回的映射 具有列表值


因此,一些强制转换序列(例如,
(Map)(Map)
)将起作用。

我认为您不需要有关ArrayListMultimap.create()的常规信息,更简单的解决方案是ArrayListMultimap.create(),我认为您不需要有关ArrayListMultimap.create()的常规信息,更简单的解决方案是ArrayListMultimap.create()他没有在任何地方声明地图中的对象实际上是列表。当他从地图中检索项目时,强制转换它只会产生ClassCastException。他没有在任何地方声明地图中的对象实际上是列表。当他从地图中检索项目时,强制转换它只会产生ClassCastException。
Multimap<Integer, Object> multimap = ArrayListMultimap.create();
for (int i = 0; i < myVar; i++) {
  multimap.putAll(Multimaps.forMap(getMyObjectMap(i)));
}
Map<Integer, Collection<Object>> allObjectsMap = multimap.asMap();