【问题标题】:What is the idiomatic way to map a Collection<Foo> onto a MultiMap<A, B>? [duplicate]将 Collection<Foo> 映射到 MultiMap<A, B> 的惯用方法是什么? [复制]
【发布时间】:2018-08-07 16:51:15
【问题描述】:

Collection&lt;Foo&gt; 映射到MultiMap&lt;A, B&gt; 的惯用方式是什么?是

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

(当然,这是简化的。)

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

new MultiMap 可以与这些映射一起返回吗?

【问题讨论】:

标签: java collections functional-programming guava multimap


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 2015-12-08
    • 2021-10-06
    • 1970-01-01
    • 2012-06-17
    • 2020-04-30
    • 1970-01-01
    相关资源
    最近更新 更多