我正在使用 Google Guava 12 中的 MultiMap,如下所示:
Multimap<Integer, OccupancyType> pkgPOP = HashMultimap.create();
将值插入此多重映射后,我需要返回:
Map<Integer, Set<OccupancyType>>
但是,当我这样做时:
return pkgPOP.asMap();
它返回我
Map<Integer, Collection<OccupancyType>>
我怎样才能返回Map<Integer, Set<OccupancyType>>
反而 ?
Look at 本期和 Kevin Bourrillion 的评论#2 http://code.google.com/p/google-collections/issues/detail?id=118#c2,Guava 开发负责人:
您可以双重投射Map<K, Collection<V>>
首先到原始地图和
然后到Map<K, Set<V>>
你要的那个。你必须抑制
未经检查的警告,您应该在那时发表评论,“安全是因为
SetMultimap 保证了这一点。”我什至可以更新 SetMultimap
javadoc提到这个技巧。
因此,进行未经检查的强制转换:
@SuppressWarnings("unchecked") // Safe because SetMultimap guarantees this.
final Map<Integer, Set<OccupancyType>> mapOfSets =
(Map<Integer, Set<OccupancyType>>) (Map<?, ?>) pkgPOP.asMap();
EDIT:
从 Guava 15.0 开始你可以使用辅助方法 https://google.github.io/guava/releases/snapshot-jre/api/docs/com/google/common/collect/Multimaps.html#asMap-com.google.common.collect.SetMultimap-以更优雅的方式做到这一点:
Map<Integer, Set<OccupancyType>> mapOfSets = Multimaps.asMap(pkgPOP);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)