【发布时间】:2014-05-25 01:47:52
【问题描述】:
我有一个List<Foo> 并想要一个Multimap<String, Foo>,我们已经按照Foo 的getId() 函数对它们进行了分组。
我正在使用 Java 8,它几乎可以做到:
List<Foo> foos = ...
Map<String, List<Foo>> foosById = foos.stream().collect(groupingBy(Foo::getId));
但是,我有大量的代码需要 MultiMap<String, Foo>,所以这并没有为我节省任何东西,我又回到使用 for 循环来创建我的 Multimap。有没有我错过的不错的“功能性”方式?
【问题讨论】:
-
这不是重复的,因为另一个问题是通过数组(标签)而不是具有单个值(id)的属性来索引 Foo 的属性
-
从 Guava 21.0 开始,有一个内置的 Multimaps#toMultimap 和 flatteningToMultimap 方法返回收集器。
-
投票重新打开,因为这不是链接问题的重复。这一个是 API 的直接使用(如已接受的答案中所述),而另一个更多是关于转换和平面映射值,而不是真正关于实际集合本身。
-
@DanielBickler 现在可以再次发布答案,因为此问题已重新打开,我已将您的评论扩展为完整答案:stackoverflow.com/a/68443128/1108305
标签: java java-stream guava