Как проверить, есть ли элемент в массиве / хэше / коллекции / списке Groovy?


127

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


Можете ли вы найти индекс также и в том месте, где находится этот равный элемент в списке?
Атхарва Джохри,

2
@AtharvaJohriassert [12,42,33].indexOf(42) == 1
Риггс

Ответы:


138

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

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

И, кроме того, чтобы проверить, содержит ли карта какое-либо ненулевое значение под определенным ключом, достаточно проверить следующее выражение if(aMap["aKey"]==aValue).
Наил Максудов


55

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

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

16
Вероятно, вы хотели сказать [1,2,3] .contains (1). Поскольку я предполагаю, что функция contains сама уже возвращает логическое значение. Почему вы хотите снова сравнить это с жестко запрограммированной «истиной».
Harshay Buradkar

6
@HarshayBuradkar Чтобы убедиться true == true, конечно, # шутка
Automatico

8

Если вам действительно нужен метод include в ArrayList, просто добавьте его:

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

3

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

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

тогда .contains (myObjectToCompareTo) будет оценивать данные в 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.*")
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.