Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何转换多重映射<;整数,Foo>;映射<;整数,集合<;Foo>&燃气轮机;用番石榴?_Java_Set_Guava - Fatal编程技术网

Java 如何转换多重映射<;整数,Foo>;映射<;整数,集合<;Foo>&燃气轮机;用番石榴?

Java 如何转换多重映射<;整数,Foo>;映射<;整数,集合<;Foo>&燃气轮机;用番石榴?,java,set,guava,Java,Set,Guava,我使用Google Guava 12的MultiMap,如下所示: Multimap<Integer, OccupancyType> pkgPOP = HashMultimap.create(); 它还我 Map<Integer, Collection<OccupancyType>> Map 我如何返回Map 做不安全的演员。会安全的 由于Java继承的工作方式,它不能返回映射。本质上,Multimap超类型必须返回一个Map,因为Map不是Map的子类

我使用Google Guava 12的MultiMap,如下所示:

Multimap<Integer, OccupancyType> pkgPOP = HashMultimap.create();
它还我

Map<Integer, Collection<OccupancyType>>
Map

我如何返回
Map

做不安全的演员。会安全的

由于Java继承的工作方式,它不能返回
映射。本质上,
Multimap
超类型必须返回一个
Map
,因为
Map
不是
Map
的子类型,所以不能重写
asMap()
来返回
Map

看,番石榴头:

您可以先将
贴图
双重强制转换为原始贴图,然后 然后转到所需的
映射。你必须抑制一个
未选中的警告,您应该在该点上发表评论,“安全,因为
SetMultimap保证了这一点。“我甚至可以更新SetMultimap
javadoc提到了这个技巧

你也应该这样做:

@SuppressWarnings("unchecked") // Safe because SetMultimap guarantees this.
final Map<Integer, Set<OccupancyType>> mapOfSets = 
    (Map<Integer, Set<OccupancyType>>) (Map<?, ?>) pkgPOP.asMap();
@SuppressWarnings(“unchecked”)//安全,因为SetMultimap保证了这一点。
最终地图地图集=
(Map)(Map)pkgPOP.asMap();
编辑:

自Guava 15.0以来,您可以使用以下更优雅的方式:

Map<Integer, Set<OccupancyType>> mapOfSets = Multimaps.asMap(pkgPOP);
Map-mapofset=Multimaps.asMap(pkgPOP);

Louis,你根本没睡,是吗?;)我对(Set)MultiMap使用什么实现重要吗?(在我的例子中,我使用的是HashMultiMap)。如果我使用这样的东西,
SetMultiMap-mapOfSets=LinkedListMultiMap.create()
那么,
LinkedListMultiMap
是一个
ListMultimap
,而不是
SetMultiMap
。只要使用一些
SetMultimap
实现,例如
LinkedHashMultimap
TreeMultimap
,就可以了。(还有@Xaerxess,我在英国时间度过夏天。)@LouisWasserman谢谢!您和Xaerxess的回复对我来说都是很好的答案。我确信最右边的演员必须是普通的
Map
,但这可能是因为我们不再关心的javac版本。。。不确定。
@SuppressWarnings("unchecked") // Safe because SetMultimap guarantees this.
final Map<Integer, Set<OccupancyType>> mapOfSets = 
    (Map<Integer, Set<OccupancyType>>) (Map<?, ?>) pkgPOP.asMap();
Map<Integer, Set<OccupancyType>> mapOfSets = Multimaps.asMap(pkgPOP);