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

StackOverflow https://stackoverflow.com/questions/51927

  •  09-06-2019
  •  | 
  •  

Вопрос

Как узнать, содержит ли массив элемент?Я подумал, что может быть что-то вроде [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')}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top