collections - 常规列表 : Group By element's count and find highest frequency elements

标签 collections groovy

我有一个常规列表如下

def certs = ['0xc1','0xc1','0xc1','0xc1','0xc2','0xc2','0xc3','0xc4','0xc4','0xc5','0xc5','0xc5','0xc5']

我试图通过其计数找到每个元素和组的出现。
我试过了
certs.groupBy { it }.findAll { it.value.size() }

但我得到以下输出
[0xc1:[0xc1, 0xc1, 0xc1, 0xc1], 0xc2:[0xc2, 0xc2], 0xc3:[0xc3], 0xc4:[0xc4, 0xc4], 0xc5:[0xc5, 0xc5, 0xc5, 0xc5]]

相反,我期待下面
[0xc1:4, 0xc2:2, 0xc3:1, 0xc4:2, 0xc5:4]

有人可以帮我弄这个吗?另外我想在我的例子中找到列表中出现的最大元素 0xc10xc5
更新:
def myMap = certs.inject([:]) { m, x -> if (!m[x]) m[x] = 0; m[x] += 1; m }
def maxValue = myMap.values().max{it} 
def myKeys = []
myMap.findAll{ it.value == maxValue }.each{myKeys << it?.key}
println myKeys  // result = [0xc1:4, 0xc5:4]
//println myMap.sort { a, b -> b.value <=> a.value }

最佳答案

Map counts = certs.countBy { it }
counts.findAll { it.value == counts.values().max() }

或单线
certs.countBy { it }.groupBy { it.value }.max { it.key }.value.keySet()

关于collections - 常规列表 : Group By element's count and find highest frequency elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30674484/

相关文章:

Scala - 比较两个选项[Seq[String]]

java - 将字符的 ArrayList 转换为字符串?

java - 如何在声明java中初始化一个点数组

使用 groovy 脚本在 Jenkins 中选择 Git 分支

list - 如何获取grails中的复选框列表

grails - Cobertura覆盖Grails

database - IMDB(内存数据库)与 Java 集合

java - 从 ArrayList<HashMap<String, HashMap<String, String>>> 获取元素

jenkins - 如何将 groovy 变量传递给 shell block jenkins

grails - GRAILS:groovy.lang.MissingPropertyException:没有此类属性。