Как проверить, есть ли элемент в 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')
Если вы действительно хотите, чтобы ваш метод 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')}
Я сделал это так, чтобы он работал, если кто-то ищет его.