Mengendalikan dan Mengeluarkan Item dari Strim

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan belajar tentang pelbagai cara di mana kita dapat beroperasi pada item dalam aliran Java 8 dan kemudian menghapusnya setelah operasi selesai.

2. Persediaan

Mari kita tentukan objek Item kita terlebih dahulu. Ini adalah objek sederhana dengan bidang int tunggal .

Ini mempunyai kaedah yang menentukan apakah objek tersebut memenuhi syarat untuk beroperasi, 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 Aliran kita yang boleh menjadi koleksi Item:

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

3. Menapis Item

Dalam banyak kes, jika kita ingin melakukan sesuatu dengan subkumpulan item, kita dapat menggunakan kaedah penapis Aliran # , dan kita tidak perlu membuang apa-apa terlebih dahulu:

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

4. Mengendalikan dan Mengeluarkan Item

4.1. Koleksi.removeIf

Kita boleh menggunakan Aliran untuk mengulangi dan mengoperasikan koleksi Item .

Dengan menggunakan Aliran , kita dapat menerapkan fungsi lambda yang dikenali sebagai Predicates . Untuk membaca lebih lanjut mengenai Aliran dan Predikat , kami mempunyai artikel lain di sini.

Kami dapat membuat Predikat yang akan menentukan sama ada Item layak untuk dikendalikan pada:

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

Predicate kami akan menapis Item yang ingin kami kendalikan:

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

Setelah selesai beroperasi pada item dalam aliran, kami dapat menghapusnya menggunakan Predikat yang sama yang kami gunakan sebelumnya untuk menyaring:

itemList.removeIf(isQualified);

Secara dalaman, removeIf menggunakan Iterator untuk mengulangi senarai dan memadankan elemen menggunakan predikat. Kita sekarang boleh membuang unsur yang sepadan dari senarai.

4.2. Koleksi.ringkasSemua

Kami juga boleh menggunakan senarai lain untuk menahan elemen yang telah dikendalikan, dan kemudian mengeluarkannya dari senarai asal:

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 mudah untuk membuang semua elemen yang sepadan dalam senarai.

5. Kesimpulan

Dalam artikel ini, kami melihat cara operasi pada item di Java 8 Streams dan kemudian menghapusnya. Kami juga melihat cara melakukannya dengan menggunakan senarai tambahan dan membuang semua elemen yang sesuai.

Kod sumber untuk tutorial ini dan kes ujian yang berkaitan boleh didapati di GitHub.