我有一个这样的集合:
pull
例如。
[[patient1,value1], [patient2,value2]]
我使用x = [[1, 20.28], [1, 11.11], [2, 4.60], [2, 3.68]]
来获取每位患者的计数:
countBy
我试图在没有运气的情况下获得每位患者的总和:
def counts = x.countBy{patient, value -> patient}
我有什么遗失的吗?
注意:这里的总体目标是获得患者使用的平均值:
def sums = x.groupBy({patient, value -> patient }).collectEntries{p, v -> p:v.sum()}
谢谢!
答案 0 :(得分:6)
在groupBy方法中,闭包标识了您要分组的内容,列表条目在分组值下归档:
x.groupBy { it[0] } // map entries by patient number
评估为
[1:[[1, 20.28], [1, 11.11]], 2:[[2, 4.60], [2, 3.68]]]
collectEntries方法指定每个映射条目的外观,假设collectEntries的每个输入都有一个键的患者编号和该键的值对的列表。所以
x.groupBy {it[0]}.collectEntries {[(it.key): it.value.sum {it[1]}]}
评估为
[1:31.39, 2:8.28]
每位患者的平均值
x.groupBy {it[0]}.collectEntries {[(it.key): it.value.sum {it[1]}/it.value.size()]}
评估为[1:15.695, 2:4.14]
平均值:
def avgs = [1:15.695, 2:4.14]
def averageOfAverages = avgs.entrySet().sum {it.value} / avgs.size()