首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy GroupBy变量KeySet

Groovy GroupBy变量KeySet
EN

Stack Overflow用户
提问于 2020-04-09 09:49:34
回答 1查看 71关注 0票数 0

我很难使用groovy groupBy

我需要支持按可变键集对数据集进行分组。

我编写了一个测试来解释我的困境,并希望了解一下如何实现它:

https://groovyconsole.appspot.com/script/5155615986941952

代码语言:javascript
复制
List<Map> people = [
    [
        Sex: "Male",
        Age: 30,
        Job: "Programmer",
        Name: "Boris"
    ],
    [
        Sex: "Female",
        Age: 30,
        Job: "Programmer",
        Name: "Jennifer"
    ],
    [
        Sex: "Male",
        Age: 40,
        Job: "Web Designer",
        Name: "Bob"
    ],
    [
        Sex: "Female",
        Age: 20,
        Job: "Database Admin",
        Name: "Alice"
    ]
]


List results = []
if(people.groupBy({it.Sex}, {it.Age}) != groupBySpecifiedCols(people, ["Sex", "Age"])){
  return "Failed 1"
}

if(people.groupBy({it.Sex}, {it.Age}, {it.Job}) != groupBySpecifiedCols(people, ["Sex", "Age", "Job"])){
  return "Failed 2"
}

def groupBySpecifiedCols(List<Map> data, List<String> columns){
  // IMPLEMENT HERE

  return null
}


return "Success!"​​​​
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-09 09:54:18

事实上,我想我刚刚解决了这个问题,在经历了几个小时的挫折之后,结果变得很简单:

代码语言:javascript
复制
def groupBySpecifiedCols(List<Map> data, List<String> columns){
  List<Closure> groupByClosures = []
  columns.each{ column ->
    groupByClosures << { it[column] }
  }

  return data.groupBy(groupByClosures)
}

正如注释中指出的那样,编辑有一种可能更简洁的方法:

代码语言:javascript
复制
def groupBySpecifiedCols(List<Map> data, List<String> columns){
  return data.groupBy(columns.collect{ col -> ((Closure){ it[col] })})
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61118351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档