List1[[name:'mohit',roll:'1305'],[name:'mohit',roll:'2414']]
如何比较两个名字是否相等??
我的意思是list1.get(name)==???
答案 0 :(得分:0)
至少有几种方法可以检查name
键是否为列表中的两个(或所有)地图保留相同的值。
假设:
def list = [[name:'mohit',roll:'1305'],[name:'mohit',roll:'2414']]
如果列表中只有两个(或最多两个)地图,则可以直接比较name
键的值,例如
assert list.getAt(0)?.name == list.getAt(1)?.name
以上构造是list[0]?.name == list[1]?.name
的替代方案。主要区别在于,如果您的列表不包含两个元素,.getAt(index)
将不会抛出IndexOutOfBoundsException
。
如果检查列表中的所有元素是否包含name
键的相同值,您可以转换列表以保存唯一的名称列表并检查其大小是否等于1:
assert list.collect { it.name }.unique().size() == 1
您可以使用更传统的方式而不是使用创建列表的.unique()
来调用.toSet()
方法,这将创建Set
而不是列表(Set
仅包含独特的价值观):
assert list.collect { it.name }.toSet().size() == 1
最后,您可以使用Groovy的点差运算符代替收集:
assert list*.name.toSet().size() == 1
希望它有所帮助。