当前位置:  开发笔记 > 编程语言 > 正文

你如何在Groovy中一起使用GroupBy和Sum?

如何解决《你如何在Groovy中一起使用GroupBy和Sum?》经验,为你挑选了1个好方法。

我有一个这样的集合:

[[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()}

有什么我想念的吗?

注意:这里的总体目标是获得患者使用的平均值:

def avgs = sums.collect{patient, value -> (value / counts[patient]) }

谢谢!



1> Nathan Hughe..:

在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()

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有