如何在转换集合到映射期间计算集合中的相同单词

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在转换集合到映射期间计算集合中的相同单词相关的知识,希望对你有一定的参考价值。

我有列表,它应该转换为映射,其中键是集合的元素,值是这个元素的入口计数。

我尝试这样做,但它导致不一致的结果:

def list = ["first","first","second"]
def mapList = [:]

mapList = list.collectEntries{
    [(it):list.count{it}]
}

结果:

{"first":3,"second":3}

预期结果:

{"first":2, "second":1}
答案

你也可以使用

list.countBy { it }
另一答案

您可以先使用Collection.groupBy(closure)按值将结果分组到Map<String, List<String>>,最后您可以将此地图转换为Map<String, Integer>,如:

list.groupBy { it }.collectEntries { k,v -> [(k): v.size()]}

对于给定的输入,它将产生以下输出:

[first:2, second:1]

或者,您可以使用Java Stream API:

list.stream()
        .collect(Collectors.groupingBy(
            Function.identity(), 
            Collectors.counting()
        ))

它将产生相同的结果,但对于大型数据集效率明显更高。

以上是关于如何在转换集合到映射期间计算集合中的相同单词的主要内容,如果未能解决你的问题,请参考以下文章

如何将文件中的不同行号存储到一个集合中?

如何使用Automapper将更改映射到现有集合?

Java中的集合(Map)

大型字谜搜索未读取到集合 Python 的末尾

14.5 Map集合

如何将多个值类型集合映射到 Hibernate 中的一个表?