Bagaimana cara mengecek apakah elemen dalam groovy array / hash / collection / list?


127

Bagaimana cara mengetahui jika array berisi elemen? Saya pikir mungkin ada sesuatu seperti [1, 2, 3].includes(1)yang akan dievaluasi sebagai true.


Dapatkah Anda menemukan indeks juga di mana elemen yang sama ini ada dalam daftar?
Atharva Johri

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

Jawaban:


138

.contains () adalah metode terbaik untuk daftar, tetapi untuk peta Anda harus menggunakan .containsKey () atau .containsValue ()

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

Dan, selain itu, untuk memeriksa apakah peta berisi beberapa nilai bukan nol di bawah kunci tertentu, cukup untuk memeriksa ekspresi berikut if(aMap["aKey"]==aValue).
Naeel Maqsudov

245

Gula sintaksis

1 in [1,2,3]

32
Cermat. def m = [a: true]; 'a' in m→ benar belum def m = [a: false]; 'a' in m→ salah!
Jesse Glick

55

Untuk daftar, gunakan contains:

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

16
Mungkin Anda ingin mengatakan [1,2,3] .berisi (1). Karena saya menebak mengandung fungsi itu sendiri sudah mengembalikan boolean. Mengapa Anda ingin membandingkannya kembali dengan hardcoded 'true'.
Harshay Buradkar

6
@HarshayBuradkar Untuk memastikan true == true, tentu saja #canda
Automatico

8

Jika Anda benar-benar ingin memasukkan metode Anda pada ArrayList, cukup tambahkan:

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

3

Gotcha PENTING untuk menggunakan .contains () pada Kumpulan Objek, seperti Domain. Jika deklarasi Domain berisi EqualsAndHashCode, atau implementasi equals lainnya () untuk menentukan apakah Ojbect itu sama, dan Anda telah mengaturnya seperti ini ...

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

maka .contains (myObjectToCompareTo) akan mengevaluasi data di myObjectToCompareTo dengan data untuk setiap instance Object dalam Koleksi. Jadi, jika metode equals Anda tidak cukup, seperti milik saya, Anda mungkin melihat hasil yang tidak terduga.


2
def fruitBag = ["orange","banana","coconut"]
def fruit = fruitBag.collect{item -> item.contains('n')}

Saya melakukannya seperti ini sehingga berfungsi jika seseorang mencarinya.



0

Anda juga dapat menggunakan kecocokan dengan ekspresi reguler seperti ini:

boolean bool = List.matches("(?i).*SOME STRING HERE.*")
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.