Java 绘制收藏地图的惯用方法是什么<;Foo>;在多重映射上<;A、 B>;?

Java 绘制收藏地图的惯用方法是什么<;Foo>;在多重映射上<;A、 B>;?,java,collections,functional-programming,guava,multimap,Java,Collections,Functional Programming,Guava,Multimap,将集合映射到多重映射的惯用方法是什么?是 public class Foo { public A key; public B val; } (当然,这是简化的。) 我能想到的方法是使用Collection::stream()在每个元素上调用MultiMap::put,但我觉得可能有一种更优雅的方法可以做到这一点 从21.0版开始,最惯用的方法是使用Guava已经提供的收集器之一,在这种情况下,使用实用方法提供的收集器: Multimap<A, B> result =

集合
映射到
多重映射
的惯用方法是什么?是

public class Foo {
    public A key;
    public B val;
}
(当然,这是简化的。)

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


从21.0版开始,最惯用的方法是使用Guava已经提供的收集器之一,在这种情况下,使用实用方法提供的收集器:

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

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

您在谈论哪个Multimap类?从哪个库?也许这是一个简单的答案,是的,你可以定义你自己的收集器。如果您使用的是Guava或其他库,请标记它,否则请提供更多上下文。假设
MultiMap
具有与
Map
类似的API,您可以这样做:
MultiMap mm=list.stream().collect(MultiMap::new,(m,f)->m.put(f.getKey(),f.getVal()),MultiMap::putAll)