将 Guava ListMultimap 转换为 Java Map

tkr*_*use 2 java multimap guava apache-commons-collection

GuavaMultiMap有实现ImmutableListMultimapImmutableSetMultimap. 鉴于我已经创建了一个ImmutableListMultimap<String, Anything>实例,如何将其转换为java.util.Map<String, List<Anything>>

asMap()方法返回 a java.util.Map<String, Collection<Anything>>,但不能转换为java.util.Map<String, List<Anything>>

我现在拥有的最好的就是

 final Map<String, Collection<Anything>> listMultimap = multimap.asMap();
 // convert to Map<String, List<>>
 final Map<String, List<Anything>> listMap = listMultimap.entrySet().stream()
     .collect(Collectors.toMap(
                  Map.Entry::getKey, 
                  e -> (List<Anything>) e.getValue()));

Run Code Online (Sandbox Code Playgroud)

但这看起来并不理想。鉴于实例变量是 ListMultimap 类型,是否应该有一个方便的方法将其表示为 a Map<..., List>

Apache commons-collections 也ArrayListValuedHashMap有同样的问题。

Xae*_*ess 5

ListMultimap.asMap()文档提到

注意:返回的映射值保证为 类型List。要获取具有更具体泛型类型的映射Map<K, List<V>>,请Multimaps.asMap(ListMultimap)改为调用。

因此,只需使用静态辅助方法Multimaps之一即可:

返回multimap.asMap(),其类型从 更正Map<K, Collection<V>>Map<K, List<V>>