如何创建多重贴图来自地图>>?
我没有找到这样的多重映射构造...当我想这样做时,我会迭代映射,并填充多重映射。还有其他办法吗?
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]}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
假设你有
那么我相信这是你能做的最好的
或更优化的,但更难阅读
Assuming you have
Then I believe this is the best you can do
or the more optimal, but harder to read
这个问题有点老了,但我想我会给出一个更新的答案。使用 Java 8,您可以
根据需要执行类似 This 应该为您提供
{1=[a, b, c, c]}
的操作。This question is a little old, but I thought I'd give an updated answer. With Java 8 you could do something along the lines of
This should give you
{1=[a, b, c, c]}
, as desired.这是我为我的 StuffGuavaIsMissing 类编写的有用的通用版本。
还有一个不可变的版本:
Here is a useful generic version that I wrote for my StuffGuavaIsMissing class.
And an immutable version:
更新:对于你所问的问题,我认为你需要回到
Multimap.putAll
。UPDATE: For what you're asking, I think you're going to need to fall back to
Multimap.putAll
.您可以使用
com.google.common.collect.Multimaps.flatteningToMultimap
作为流收集器。给定地图:
您可以执行以下操作:
You can use the
com.google.common.collect.Multimaps.flatteningToMultimap
as your stream collector.Given map:
You can do the following:
以下代码没有 Google 的 Guava 库。它用于双值作为键和排序顺序
Following code without Google's Guava library. It is used for double value as key and sorted order
还有另一种方法可以使用:
Multimaps#newMultimap
如果您使用扩展
List
或Set
的集合,则文档建议使用特殊方法Multimaps#newListMultimap
和Multimaps#newSetMultimap
。There is another method one can use:
Multimaps#newMultimap
If you are using a collection extending
List
orSet
, the docs recommend using the special methodsMultimaps#newListMultimap
andMultimaps#newSetMultimap
.