javaslang元组列表2映射转换

时间:2017-04-06 14:27:32

标签: functional-programming vavr

使用javaslang 2.1.0-alpha将Stream<Tuple2<T,U>>转换为Map<T,List<U>>的最常用方法是什么?

    // initial stream
    Stream.of(
            Tuple.of("foo", "x"),
            Tuple.of("foo", "y"),
            Tuple.of("bar", "x"),
            Tuple.of("bar", "y"),
            Tuple.of("bar", "z")
    )        

应该成为:

    // end result
    HashMap.ofEntries(
            Tuple.of("foo", List.of("x","y")),
            Tuple.of("bar", List.of("x","y","z"))
    );

2 个答案:

答案 0 :(得分:7)

@Opal是对的,foldLeft是从元组创建HashMap的方法。

在javaslang 2.1.0-alpha中,我们还有 Multimap 来表示类似地图的数据结构中的元组。

// = HashMultimap[List]((foo, x), (foo, y), (bar, x), (bar, y), (bar, z))
Multimap<String, String> map =
        HashMultimap.withSeq().ofEntries(
                Tuple.of("foo", "x"),
                Tuple.of("foo", "y"),
                Tuple.of("bar", "x"),
                Tuple.of("bar", "y"),
                Tuple.of("bar", "z")
        );

// = Some(List(x, y))
map.get("foo");

(另见HashMultimap Javadoc)

根据地图的进一步处理方式,这可能会派上用场。

免责声明:我是Javaslang的创建者

答案 1 :(得分:5)

不确定这是否是最惯用的,但这是.paragraph-wrapper { display: flex; justify-content: center; } 的工作:

foldLeft