我正在使用来自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>>
?
查看此问题,并评论番石榴开发负责人Kevin Bourrillion的第二条评论:
您可以
Map<K, Collection<V>>
先将其双播到原始Map,然后再双播到所需的MapMap<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();
编辑:
从Guava 15.0开始,您可以使用辅助方法以更优雅的方式执行此操作:
Map<Integer, Set<OccupancyType>> mapOfSets = Multimaps.asMap(pkgPOP);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句