【发布时间】:2018-08-07 16:51:15
【问题描述】:
将Collection<Foo> 映射到MultiMap<A, B> 的惯用方式是什么?是
public class Foo {
public A key;
public B val;
}
(当然,这是简化的。)
我能想到的方法是使用Collection::stream() 在每个元素上调用MultiMap::put,但我觉得可能有更优雅的方法来做到这一点。
new MultiMap 可以与这些映射一起返回吗?
【问题讨论】:
-
你说的是哪个 MultiMap 类?来自哪个图书馆?
-
简短的回答是,是的,您始终可以定义自己的收集器。 docs.oracle.com/javase/8/docs/api/java/util/stream/…
-
如果您使用 Guava 或其他库,请标记它,否则请提供更多上下文。
-
假设
MultiMap具有与Map相似的API,您可以这样做:MultiMap<A, B> mm = list.stream().collect( MultiMap::new, (m, f) -> m.put( f.getKey(), f.getVal() ), MultiMap::putAll );
标签: java collections functional-programming guava multimap