Как проверить, есть ли элемент в groovy array/hash/collection/list?

Как определить, содержит ли массив элемент? Я думал, что может быть что-то вроде [1,2,3].includes(1), которое будет оцениваться как true

Ответ 1

.contains() - лучший метод для списков, но для карт вам нужно использовать .containsKey() или .containsValue()

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

Ответ 2

Некоторые синтаксические сахара

1 in [1,2,3]

Ответ 3

Для списков используйте contains:

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

Ответ 4

Если вы действительно хотите, чтобы ваш метод включает в ArrayList, просто добавьте его:

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

Ответ 5

ВАЖНО Gotcha для использования .contains() в коллекции объектов, таких как Домены. Если в объявлении домена содержится EqualsAndHashCode или какая-либо другая реализация equals(), чтобы определить, равны ли эти Ojbect, и вы установили его так...

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

то .contains(myObjectToCompareTo) будет оценивать данные в myObjectToCompareTo с данными для каждого экземпляра объекта в коллекции. Таким образом, если ваш метод equals не соответствует нюханию, поскольку мой не был, вы можете увидеть неожиданные результаты.

Ответ 6

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

Я сделал это так, чтобы он работал, если кто-то его ищет.