Mencari String dalam ArrayList

1. Ikhtisar

Dalam tutorial ini, kita akan melihat berbagai cara untuk mencari String di ArrayList . Maksud kami adalah untuk memeriksa apakah urutan karakter tidak kosong tertentu ada di salah satu elemen di ArrayList dan mengembalikan daftar dengan semua elemen yang cocok.

2. Pendauran Dasar

Pertama, mari gunakan loop dasar untuk mencari urutan karakter dalam string pencarian yang diberikan menggunakan metode berisi kelas String Java :

public List findUsingLoop(String search, List list) { List matches = new ArrayList(); for(String str: list) { if (str.contains(search)) { matches.add(str); } } return matches; } 

3. Aliran

Java 8 Streams API memberi kami solusi yang lebih ringkas dengan menggunakan operasi fungsional.

Pertama, kita akan menggunakan metode filter () untuk mencari daftar input kita untuk string pencarian, dan kemudian, kita akan menggunakan metode kumpulkan untuk membuat dan mengisi daftar yang berisi elemen yang cocok:

public List findUsingStream(String search, List list) { List matchingElements = list.stream() .filter(str -> str.trim().contains(search)) .collect(Collectors.toList()); return matchingElements; }

4. Perpustakaan Pihak Ketiga

Jika kita tidak dapat menggunakan Java 8 Stream API, kita dapat melihat perpustakaan pihak ketiga seperti Commons Collections dan Google Guava.

Untuk menggunakannya, kita hanya perlu menambahkan Guava, Commons Collections, atau keduanya dependensi di file pom.xml kita:

 com.google.guava guava 23.0   org.apache.commons commons-collections4 4.1 

4.1. Koleksi Commons

Koleksi Commons memberi kita metode IterableUtils.filteredIterable () yang cocok dengan Iterable yang diberikan dengan Predikat .

Mari kita panggil IterableUtils.filteredIterable () , mendefinisikan predikat untuk memilih hanya elemen yang berisi string pencarian. Kemudian, kita akan menggunakan IteratorUtils.toList () untuk mengonversi Iterable menjadi List :

public List findUsingCommonsCollection(String search, List list) { Iterable result = IterableUtils.filteredIterable(list, new Predicate() { public boolean evaluate(String listElement) { return listElement.contains(search); } }); return IteratorUtils.toList(result.iterator()); } 

4.2. Google Guava

Google Guava menawarkan solusi serupa ke Apache's filteredIterable () dengan metode Iterables.filter () . Mari kita gunakan untuk memfilter daftar dan hanya mengembalikan elemen yang cocok dengan string pencarian kita:

public List findUsingGuava(String search, List list) { Iterable result = Iterables.filter(list, Predicates.containsPattern(search)); return Lists.newArrayList(result.iterator()); }

5. Kesimpulan

Dalam tutorial ini, kita telah mempelajari berbagai cara mencari String di ArrayList. Kami pertama kali memulai dengan loop for yang sederhana dan kemudian melanjutkan dengan pendekatan menggunakan Stream API. Akhirnya, kami melihat beberapa contoh menggunakan dua pustaka pihak ketiga - Koleksi Google Guava dan Commons .

Contoh lengkapnya tersedia di GitHub.