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

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

6 ответов


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

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

синтаксис сахара

1 in [1,2,3]

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

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

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

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

важно Gotcha для использования .содержит () в коллекции объектов, таких как Домены. Если объявление домена содержит 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')}

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