你如何在Groovy中一起使用GroupBy和Sum?
发布时间:2020-12-14 16:25:00 所属栏目:大数据 来源:网络整理
导读:我有一个这样的集合: [[patient1,value1],[patient2,value2]] 例如. x = [[1,20.28],[1,11.11],[2,4.6],3.68]] 我使用countBy来获得每位患者的计数: def counts = x.countBy{patient,value - patient} 我试图得到每个病人的总和没有运气: def sums = x.gr
我有一个这样的集合:
[[patient1,value1],[patient2,value2]] 例如. 我使用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]) } 谢谢! 解决方法
在groupBy方法中,闭包标识要分组的内容,列表条目在分组值下归档:
x.groupBy { it[0] } // map entries by patient number 评估为 [1:[[1,11.11]],2:[[2,4.60],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() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |