Mengoperasikan dan Menghapus Item dari Stream

1. Ikhtisar

Dalam tutorial singkat ini, kita akan belajar tentang berbagai cara untuk mengoperasikan item dalam aliran Java 8 dan kemudian menghapusnya setelah operasi selesai.

2. Penyiapan

Mari kita definisikan objek Item kita terlebih dahulu. Ini adalah objek sederhana dengan satu bidang int .

Ini memiliki metode yang menentukan apakah objek memenuhi syarat untuk operasi, berdasarkan nilai internal:

class Item { private int value; // constructors public boolean isQualified() { return value % 2 == 0; } public void operate() { System.out.println("Even Number"); } }

Sekarang kita dapat membuat sumber untuk Stream kita yang bisa menjadi kumpulan Item:

List itemList = new ArrayList(); for (int i = 0; i < 10; i++) { itemList.add(new Item(i)); }

3. Menyaring Item

Dalam banyak kasus, jika kita ingin melakukan sesuatu dengan subset item, kita dapat menggunakan metode filter Stream # , dan kita tidak perlu menghapus apapun terlebih dahulu:

itemList.stream() .filter(item -> item.isQualified()) ...

4. Mengoperasikan dan Menghapus Item

4.1. Collection.removeIf

Kami dapat menggunakan Stream untuk mengulang dan mengoperasikan koleksi Item .

Menggunakan Streams , kita dapat menerapkan fungsi lambda yang dikenal sebagai Predikat . Untuk membaca lebih lanjut tentang Aliran dan Predikat , kami memiliki artikel lain di sini.

Kita dapat membuat Predikat yang akan menentukan apakah suatu Item memenuhi syarat untuk dioperasikan pada:

Predicate isQualified = item -> item.isQualified();

Predikat kami akan memfilter Item yang ingin kami operasikan:

itemList.stream() .filter(isQualified) .forEach(item -> item.operate());

Setelah kami selesai mengoperasikan item dalam aliran, kami dapat menghapusnya menggunakan Predikat yang sama yang kami gunakan sebelumnya untuk memfilter:

itemList.removeIf(isQualified);

Secara internal, removeIf menggunakan Iterator untuk mengulangi daftar dan mencocokkan elemen menggunakan predikat. Kami sekarang dapat menghapus elemen yang cocok dari daftar.

4.2. Collection.removeAll

Kami juga dapat menggunakan daftar lain untuk menampung elemen yang telah dioperasikan, dan kemudian menghapusnya dari daftar asli:

List operatedList = new ArrayList(); itemList.stream() .filter(item -> item.isQualified()) .forEach(item -> { item.operate(); operatedList.add(item); }); itemList.removeAll(operatedList);

Tidak seperti removeIf yang menggunakan Iterator, removeAll menggunakan for-loop sederhana untuk menghapus semua elemen yang cocok dalam daftar.

5. Kesimpulan

Di artikel ini, kami melihat cara mengoperasikan item di Java 8 Streams dan kemudian menghapusnya. Kami juga melihat cara melakukannya dengan menggunakan daftar tambahan dan menghapus semua elemen yang cocok.

Kode sumber untuk tutorial ini dan kasus pengujian yang relevan tersedia di GitHub.