Как определить, содержит ли массив элемент? Я подумал, что может быть что-то вроде [1, 2, 3].includes(1)
, которое оценивается как true
.
Как проверить, есть ли элемент в массиве / хэше / коллекции / списке Groovy?
Ответы (8)
.contains () - лучший метод для списков, но для карт вам нужно будет использовать .containsKey () или .containsValue ()
[a:1,b:2,c:3].containsValue(3)
[a:1,b:2,c:3].containsKey('a')
if(aMap["aKey"]==aValue)
.
- person Naeel Maqsudov; 18.12.2017
Немного синтаксического сахара
1 in [1,2,3]
def m = [a: true]; 'a' in m
→ правда, но def m = [a: false]; 'a' in m
→ ложь!
- person Jesse Glick; 01.02.2017
Для списков используйте contains
:
[1,2,3].contains(1) == true
true == true
, конечно # шутка
- person Automatico; 20.01.2015
Если вам действительно нужен метод include в ArrayList, просто добавьте его:
ArrayList.metaClass.includes = { i -> i in delegate }
Вы можете использовать оператор членства:
def list = ['Grace','Rob','Emmy']
assert ('Emmy' in list)
ВАЖНО! Попробуй использовать .contains () для коллекции объектов, таких как домены. Если объявление домена содержит EqualsAndHashCode или некоторую другую реализацию equals (), чтобы определить, равны ли эти Ojbects, и вы установили его следующим образом ...
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")
тогда .contains (myObjectToCompareTo) будет оценивать данные в myObjectToCompareTo с данными для каждого экземпляра объекта в коллекции. Итак, если ваш метод equals не подходит, как мой, вы можете увидеть неожиданные результаты.
def fruitBag = ["orange","banana","coconut"]
def fruit = fruitBag.collect{item -> item.contains('n')}
Сделал вот так, работает, если кто то ищет.
Вы также можете использовать совпадения с регулярным выражением, например:
boolean bool = List.matches("(?i).*SOME STRING HERE.*")
assert [12,42,33].indexOf(42) == 1
- person Thomas Traude   schedule 30.03.2012