如何检查groovy数组/哈希/集合/列表中的元素?


127

我如何确定数组是否包含元素?我认为可能会有类似的[1, 2, 3].includes(1)评价为true


您是否还可以从列表中该相等元素的位置找到索引?
Atharva Johri

2
@AtharvaJohriassert [12,42,33].indexOf(42) == 1
Riggs

Answers:


138

.contains()是列表的最佳方法,但是对于地图,您将需要使用.containsKey()或.containsValue()

[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')

另外,要检查映射是否在某个键下包含一些非null值,只需检查以下表达式即可if(aMap["aKey"]==aValue)
Naeel Maqsudov


55

对于列表,请使用contains

[1,2,3].contains(1) == true

16
可能您想说[1,2,3] .contains(1)。因为我猜测包含函数本身已经返回了布尔值。为什么要再次将其与硬编码的“ true”进行比较。
Harshay Buradkar,2012年

6
@HarshayBuradkar要确定true == true,当然是#joke
Automatico

8

如果您确实希望在ArrayList上使用include方法,只需添加它:

ArrayList.metaClass.includes = { i -> i in delegate }

3

重要说明在对象(例如域)集合上使用.contains()的注意事项。如果Domain声明包含EqualsAndHashCode或其他equals()实现来确定那些Ojbects是否相等,并且已将其设置为...

import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")

然后.contains(myObjectToCompareTo)将使用集合中每个Object实例的数据评估myObjectToCompareTo中的数据。因此,如果您的equals方法不能如我所愿,那么,您可能会看到意外的结果。


2
def fruitBag = ["orange","banana","coconut"]
def fruit = fruitBag.collect{item -> item.contains('n')}

我这样做是这样的,因此如果有人正在寻找它,它会起作用。



0

您还可以将匹配项与正则表达式一起使用,如下所示:

boolean bool = List.matches("(?i).*SOME STRING HERE.*")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.