los*_*jos 6 groovy functional-programming mapreduce
假设我有 Groovy 中的地图列表:
def listOfMaps = [
[k: 1, n: 'Name1', d1: 'a', d2: 'b'],
[k: 2, n: 'Name2', d1: 'c', d2: 'd'],
[k: 1, n: 'Name3', d1: 'e', d2: 'f'],
[k: 4, n: 'Name4', d1: 'g', d2: 'h']]
Run Code Online (Sandbox Code Playgroud)
我需要查找是否存在(或不存在)项目,其中k相等,但n不相等。例如,在本例中,我们有两个地图记录,其中“k”= 1,“n”为“Name1”和“Name3”。我怎样才能找到这样的数据?我想我应该按“k”分组并计算“n”中的不同值,如果“n”中对于某些“k”有超过 1 个唯一值 - 我们找到了这样的数据。我完全陷入困境,所以任何帮助将不胜感激。谢谢
编辑
现在我已经明白你的意思了,这是代码:
listOfMaps.groupBy {
it.k }.
values().
findAll { l ->
l.size() > 1 && (l.size() == l.unique { e -> e.n }.size())
}
Run Code Online (Sandbox Code Playgroud)
一开始,列表按元素分组k,然后在值中搜索大小大于 1 且大小等于唯一n元素计数的列表。它工作正常。
旧答案
findAll您可以尝试和的组合unique:
def listOfMaps = [
[k: 1, n: 'Name1', d1: 'a', d2: 'b'],
[k: 2, n: 'Name2', d1: 'c', d2: 'd'],
[k: 1, n: 'Name3', d1: 'e', d2: 'f'],
[k: 4, n: 'Name4', d1: 'g', d2: 'h'],
]
listOfMaps.findAll { it.k == 1 }.unique { it.n }
Run Code Online (Sandbox Code Playgroud)
或者与groupBy:
listOfMaps.groupBy { it.k }[1].unique { it.n }
Run Code Online (Sandbox Code Playgroud)
在 groovy 中有很多方法可以做到这一点;)