Как проверить, находится ли элемент в отличном массиве/хеше/коллекции/списке?
Вопрос
Как узнать, содержит ли массив элемент?Я подумал, что может быть что-то вроде [1, 2, 3].includes(1)
который будет оцениваться как true
.
Решение
.contains() — лучший метод для списков, но для карт вам нужно будет использовать .containsKey() или .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
Если вам действительно нужен метод include в ArrayList, просто добавьте его:
ArrayList.metaClass.includes = { i -> i in delegate }
ВАЖНО. Способ использования .contains() для коллекции объектов, таких как домены.Если объявление домена содержит EqualsAndHashCode или какую-либо другую реализацию метода равенства(), чтобы определить, равны ли эти объекты, и вы установили его следующим образом...
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode(includes = "settingNameId, value")
тогда .contains(myObjectToCompareTo) оценит данные в myObjectToCompareTo с данными для каждого экземпляра объекта в коллекции.Итак, если ваш метод равенства не работает, как мой, вы можете увидеть неожиданные результаты.
def fruitBag = ["orange","banana","coconut"]
def fruit = fruitBag.collect{item -> item.contains('n')}
Я сделал это так, чтобы это работало, если кто-то это ищет.