Как определить, содержит ли массив элемент?
Я думал, что может быть что-то вроде [1,2,3].includes(1)
, которое будет оцениваться как true
Как проверить, есть ли элемент в groovy array/hash/collection/list?
Ответ 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')}
Я сделал это так, чтобы он работал, если кто-то его ищет.