使用每种类型的计数将数组转换为Javaslang Map

Ash*_*Ash 6 java java-8 vavr

我目前正在查看Javaslang库,我正在尝试将一些代码转换为Javaslang.

我目前有一些纯Java代码

Cell[][] maze; //from input
Map<Cell, Long> cellCounts = Stream.of(maze)
            .flatMap(Stream::of)
            .collect(groupingBy(c -> c, counting()));
Run Code Online (Sandbox Code Playgroud)

我正在考虑将其转换为Javaslang,因为我对图书馆感兴趣而且我只想玩它.

我试图做类似的事情,但转换为Javaslang地图而不是java.util.Map.

到目前为止我已经尝试了这个,但后来我陷入困境,因为我无法看到转换它的方法.

Array.of(maze)
     .flatMap(Array::of)
Run Code Online (Sandbox Code Playgroud)

所以我有我的Cell对象列表,但我想弄清楚如何将其转换为javaslang.collection.Map

*编辑*

我已经看过将原始java.util.Map变为javaslang.collections.Hashmap

HashMap<Cell, Long> cellsCount = HashMap.ofEntries(cellCounts
                                                        .entrySet()
                                                        .toArray(new Map.Entry[0]));
Run Code Online (Sandbox Code Playgroud)

这仍然不符合Javaslang,但我会继续寻找.

Dan*_*ich 2

免责声明:我是 Javaslang 的作者。

使用 Javaslang 实现它的最简单方法如下:

    Map<Cell, Integer> cellCounts = Array.of(maze)
            .flatMap(Array::of)
            .groupBy(c -> c)
            .mapValues(Array::length);
Run Code Online (Sandbox Code Playgroud)

这里ArrayMap是从 导入的javaslang.collection

请注意,您可以Array用任何其他Seq实现替代Set