检查列表中所有项目的属性是否相等

时间:2018-02-15 07:05:28

标签: list arraylist groovy

List1[[name:'mohit',roll:'1305'],[name:'mohit',roll:'2414']]

如何比较两个名字是否相等??

我的意思是list1.get(name)==???

1 个答案:

答案 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

希望它有所帮助。