如何从 Map<K, Collection<V>> 创建 Multimap<K,V>?

新手上路,请多包涵

我没有找到这样的多图构造……当我想这样做时,我遍历地图,并填充多图。还有别的办法吗?

 final Map<String, Collection<String>> map = ImmutableMap.<String, Collection<String>>of(
            "1", Arrays.asList("a", "b", "c", "c"));
System.out.println(Multimaps.forMap(map));

final Multimap<String, String> expected = ArrayListMultimap.create();
for (Map.Entry<String, Collection<String>> entry : map.entrySet()) {
    expected.putAll(entry.getKey(), entry.getValue());
}
System.out.println(expected);

第一个结果是 {1=[[a, b, c, c]]} 但我预计 {1=[a, b, c, c]}

原文由 sly7_7 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 626
2 个回答

假设你有

Map<String, Collection<String>> map = ...;
Multimap<String, String> multimap = ArrayListMultimap.create();

那么我相信这是你能做的最好的

for (String key : map.keySet()) {
  multimap.putAll(key, map.get(key));
}

或更优,但更难阅读

for (Entry<String, Collection<String>> entry : map.entrySet()) {
  multimap.putAll(entry.getKey(), entry.getValue());
}

原文由 Kevin Bourrillion 发布,翻译遵循 CC BY-SA 3.0 许可协议

这个问题有点老了,但我想我会给出一个更新的答案。使用 Java 8,您可以按照以下方式做一些事情

ListMultimap<String, String> multimap = ArrayListMultimap.create();
Map<String, Collection<String>> map = ImmutableMap.of(
                           "1", Arrays.asList("a", "b", "c", "c"));
map.forEach(multimap::putAll);
System.out.println(multimap);

这应该会根据需要为您提供 {1=[a, b, c, c]}

原文由 Dillon Ryan Redding 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题