Как проверить, есть ли элемент в массиве groovy / hash / collection / list? - PullRequest
116 голосов
/ 09 сентября 2008

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

Ответы [ 6 ]

228 голосов
/ 15 сентября 2008

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

1 in [1,2,3]
119 голосов
/ 16 сентября 2008

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

[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')
45 голосов
/ 09 сентября 2008

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

[1,2,3].contains(1) == true
7 голосов
/ 02 октября 2008

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

ArrayList.metaClass.includes = { i -> i in delegate }
3 голосов
/ 31 декабря 2014

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

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

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

1 голос
/ 08 октября 2016
def fruitBag = ["orange","banana","coconut"]
def fruit = fruitBag.collect{item -> item.contains('n')}

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

...