将 Collection<Foo> 映射到 MultiMap<A, B> 的惯用方法是什么?
What is the idiomatic way to map a Collection<Foo> onto a MultiMap<A, B>?
将 Collection<Foo>
映射到 MultiMap<A, B>
的惯用方法是什么?是
public class Foo {
public A key;
public B val;
}
(当然,这是简化的。)
我能想到的方法是使用 Collection::stream()
在每个元素上调用 MultiMap::put
,但我觉得可能有更优雅的方法来做到这一点。
new MultiMap
是否可以在一行中返回这些映射?
从 21.0 版开始,最惯用的方法是使用 Guava 已经提供的收集器之一,在本例中是 Multimaps.toMultimap
实用方法提供的收集器:
Multimap<A, B> result = foos.stream()
.collect(Multimaps.toMultimap(Foo::getA, Foo::getB, ArrayListMultimap::create));
这会创建一个 ArrayListMultimap
,但是您当然可以通过使用工厂方法或 Guava 的特定构建器之一来创建您想要的具体 Multimap
。
将 Collection<Foo>
映射到 MultiMap<A, B>
的惯用方法是什么?是
public class Foo {
public A key;
public B val;
}
(当然,这是简化的。)
我能想到的方法是使用 Collection::stream()
在每个元素上调用 MultiMap::put
,但我觉得可能有更优雅的方法来做到这一点。
new MultiMap
是否可以在一行中返回这些映射?
从 21.0 版开始,最惯用的方法是使用 Guava 已经提供的收集器之一,在本例中是 Multimaps.toMultimap
实用方法提供的收集器:
Multimap<A, B> result = foos.stream()
.collect(Multimaps.toMultimap(Foo::getA, Foo::getB, ArrayListMultimap::create));
这会创建一个 ArrayListMultimap
,但是您当然可以通过使用工厂方法或 Guava 的特定构建器之一来创建您想要的具体 Multimap
。