Mencari Rentetan dalam ArrayList

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan melihat pelbagai cara untuk mencari String in ArrayList . Tujuan kami adalah untuk memeriksa sama ada urutan watak tertentu yang tidak kosong terdapat dalam salah satu elemen dalam ArrayList dan mengembalikan senarai dengan semua elemen yang sepadan.

2. Gelung Asas

Pertama, mari kita gunakan gelung asas untuk mencari urutan watak dalam rentetan carian yang diberikan menggunakan kaedah mengandungi 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

API Java 8 Streams memberi kita penyelesaian yang lebih padat dengan menggunakan operasi fungsional.

Pertama, kami akan menggunakan kaedah filter () untuk mencari senarai input kami untuk rentetan carian, dan kemudian, kami akan menggunakan kaedah kumpulkan untuk membuat dan mengisi senarai yang mengandungi elemen yang sepadan:

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

Sekiranya 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 Jambu biji, Koleksi Commons, atau kedua-dua pergantungan dalam fail pom.xml kami:

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

4.1. Koleksi Commons

Commons Collections memberi kami kaedah IterableUtils.filteredIterable () yang sesuai dengan Iterable yang diberikan terhadap Predicate .

Mari kita panggil IterableUtils.filteredIterable () , yang menentukan predikat untuk memilih hanya elemen-elemen yang mengandungi rentetan carian. Kemudian, kami akan menggunakan IteratorUtils.toList () untuk menukar Iterable ke Senarai :

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. Jambu Batu Google

Google Guava menawarkan penyelesaian yang sama dengan Apache filteredIterable () dengan Iterables.filter () kaedah. Mari gunakan untuk menyaring senarai dan hanya mengembalikan elemen yang sepadan dengan rentetan carian kami:

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, kami telah mempelajari pelbagai cara untuk mencari String in ArrayList. Kami memulakan dengan mudah untuk gelung dan kemudian diteruskan dengan pendekatan menggunakan API Strim. Akhirnya, kami melihat beberapa contoh menggunakan dua perpustakaan pihak ketiga - Google Guava and Commons Collections .

Contoh lengkap boleh didapati di GitHub.