将Collection <foo>映射到MultiMap <a,b =“”>的惯用方法是什么?

时间:2018-02-27 22:18:08

标签: java collections functional-programming guava multimap

Collection<Foo>映射到MultiMap<A, B>的惯用方法是什么?是

public class Foo {
    public A key;
    public B val;
}

(当然,这是简化的。)

我能想到的方法是使用Collection::stream()在每个元素上调用MultiMap::put,但我觉得可能有更优雅的方法来做到这一点。

并且可以使用这些映射返回new MultiMap,所有这些都在一行中吗?

1 个答案:

答案 0 :(得分:1)

从版本21.0开始,最常用的方法是使用Guava已经提供的一个收集器,在本例中是Multimaps.toMultimap实用程序方法提供的收集器:

Multimap<A, B> result = foos.stream()
    .collect(Multimaps.toMultimap(Foo::getA, Foo::getB, ArrayListMultimap::create));

这会创建一个ArrayListMultimap,但您当然可以使用工厂方法或Guava的特定构建器之一创建所需的具体Multimap