转换地图<;整数,对象>;映射<;整数,列表<;对象>>;,不使用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();