1

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()));

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

Apache commons-collectionsArrayListValuedHashMap也有同样的问题。

4

1 回答 1

3

ListMultimap.asMap()文档提到

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

因此,只需为此Multimaps使用其中一种静态辅助方法:

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

于 2020-04-14T12:47:16.593 回答