假设我在Groovy中有Map列表:
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']]
我需要找到是否存在(或不)项,其中k
相等,但n
不相等。例如,在这种情况下,我们有两个Map记录,“k”= 1,“n”为“Name 1”和“Name 3”。我如何找到这样的数据?我想我应该按“k”分组,并计算“n”中的不同值,如果有超过1唯一值在“n”为某些“k”-我们发现这样的数据。我完全卡住了,所以任何帮助将不胜感激。谢谢
6条答案
按热度按时间pvcm50d11#
编辑
现在我明白你的意思了,代码如下:
一开始列表是按
k
元素分组的,然后在值中搜索大小大于1且大小等于唯一n
元素计数的列表。旧答案
您可以尝试
findAll
和unique
的组合:或者使用
groupBy
:在Groovy中,有很多方法可以实现这一点;)
nzk0hqpo2#
您所需要的只是一个
k
和n
的组合来进行比较。您可以按照自己的方式来使用groupBy
。我更喜欢按列表分组,以便可以使用getAt(0)
来检查是否存在重复项。由于keySet()
是Set
,没有两个条目(列表)是相同的。2然后我们只需要检查第一个条目(k)是否是唯一的。fquxozlt3#
如果您对简化版本感兴趣,这个版本将构建
k
到一组n
的Map。t5zmwmid4#
我想不出比较 n 的方法,但给予这个:
编辑
我收回刚才的话。n可以与unique()进行比较:
坐在马桶上能吐出的东西真是太神奇了。
tkclm6bt5#
是的,Groovy确实非常棒,您可以使用不同的方法来实现同一个目标。
我将添加
groupBy
+unique
+grep
方法,它可能更容易理解。基本上,您需要的是通过collect / unique进行分组以减少维度,然后通过得到的集合大小进行grep。
4ktjp1zp6#
很晚了,不过还有一个
与@Opal的答案相比,这允许列表包含重复项: