Як перевірити, чи є елемент у groovy масиві / хеші / колекції / списку?


127

Як визначити, чи містить масив елемент? Я думав, що може статися щось на зразок того, [1, 2, 3].includes(1)що можна оцінити як true.


Чи можете ви знайти індекс і там, де цей рівний елемент є у списку?
Атхарва Джонрі

2
@AtharvaJohriassert [12,42,33].indexOf(42) == 1
Riggs

Відповіді:


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]. Містить (1). Тому що я здогадуюсь, що функція сама по собі вже повертає булеву форму. Чому ти хочеш знову порівняти це з твердим кодом «справжнього».
Харшай Бурадкар

6
@HarshayBuradkar Щоб переконатися true == true, звичайно, #joke
Automatico

8

Якщо ви дійсно хочете, щоб ваш метод включає в ArrayList, просто додайте його:

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

3

ВАЖЛИВО Є можливість використовувати .contains () для колекції об'єктів, таких як Домени. Якщо декларація домену містить програму EqualsAndHashCode або якусь іншу рівну () реалізацію, щоб визначити, чи рівні ці Ojbects, і ви встановили це так ...

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

тоді .contains (myObjectToCompareTo) оцінить дані в myObjectToCompareTo з даними для кожного екземпляра Object у колекції. Отже, якщо ваш метод рівних не піддається нюху, як і у мене, ви можете побачити несподівані результати.


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.