Groovy -使用groupBy进行Map并对结果中的元素示例进行计数

xdnvmnnf  于 2022-11-28  发布在  其他
关注(0)|答案(1)|浏览(135)

我将从这样一个系列开始:

def finalDocument = [[problem:problem1,fixed:true], [problem:problem1,fixed:false],[problem:problem1,fixed:false],[problem:problem2,fixed:true],[problem:problem2,fixed:false]]

我想做的是创建一个包含问题和修复数量的Map,如下所示:

["problem1":[true:1,false:2],"problem2":[true:1,false:1]]

我的最终目标是针对每个问题得出修复的问题与总问题的百分比
我尝试使用groupBy来实现这一点:

def output = finalDocument.groupby({it.problem},{it.fixed})

生成的Map是正确嵌套的,但它提供了文档列表,而不是每个文档的计数,我不知道如何实现这一点(我对Groovy和一般的脚本编写都是新手)。

ftf50wuq

ftf50wuq1#

我会这么说:

def finalDocument = [[problem:'problem1',fixed:true], [problem:'problem1',fixed:false],[problem:'problem1',fixed:false],[problem:'problem2',fixed:true],[problem:'problem2',fixed:false]]

def res = finalDocument.groupBy{ [ it.problem, it.fixed ] }.inject( [:].withDefault{ [:] } ){ acc, grp, vals -> acc[ grp.first() ][ grp.last() ] = vals.size(); acc }

assert res.toString() == '[problem1:[true:1, false:2], problem2:[true:1, false:1]]'

相关问题