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)代码>