Bagaimana Mendapatkan Elemen Terakhir dari Aliran di Java?

1. Gambaran keseluruhan

Java Stream API adalah ciri utama rilis Java 8. Aliran mewakili urutan objek yang dinilai dengan malas dan menyediakan API yang kaya, fasih, dan monadik.

Dalam artikel ini, kita akan melihat dengan cepat cara mendapatkan elemen terakhir dari Aliran. Perlu diingat bahawa kerana sifat aliran, ini bukan operasi semula jadi . Sentiasa pastikan bahawa anda tidak berfungsi dengan Aliran yang tidak terbatas .

2. Menggunakan Reduce API

Kurangkan , secara sederhana, mengurangkan set elemen dalam Aliran ke satu elemen.

Dalam kes ini, kami akan mengurangkan sekumpulan elemen untuk mendapatkan elemen terakhir dalam Aliran. Perlu diingat bahawa kaedah ini hanya akan mengembalikan hasil deterministik untuk Aliran berurutan .

Mari kita gunakan Senarai daripada String nilai, dapatkan Stream dari Senarai dan kemudian mengurangkan:

List valueList = new ArrayList(); valueList.add("Joe"); valueList.add("John"); valueList.add("Sean"); Stream stream = valueList.stream(); stream.reduce((first, second) -> second) .orElse(null); 

Di sini, aliran dikurangkan ke tahap di mana ia dibiarkan hanya dengan elemen terakhir. Sekiranya aliran kosong, ia akan mengembalikan nilai nol .

2. Menggunakan Fungsi Langkau

Cara lain untuk mendapatkan elemen terakhir aliran adalah dengan melangkau semua elemen sebelum itu . Ini dapat dicapai dengan menggunakan fungsi Skip kelas Stream . Perlu diingat bahawa dalam kes ini, kami menggunakan Aliran dua kali sehingga ada kesan prestasi yang jelas .

Mari buat senarai nilai rentetan dan gunakan fungsi ukurannya untuk menentukan berapa banyak elemen yang akan dilangkau untuk mencapai elemen terakhir.

Berikut adalah contoh kod mendapatkan elemen terakhir menggunakan langkau :

List valueList = new ArrayList(); valueList.add("Joe"); valueList.add("John"); valueList.add("Sean"); long count = valueList.stream().count(); Stream stream = valueList.stream(); stream.skip(count - 1).findFirst().get(); 

"Sean" akhirnya menjadi elemen terakhir.

4. Mendapatkan Unsur Terakhir dari Aliran Tak Terbatas

Mencuba mendapatkan elemen terakhir dari aliran tak terhingga akan menghasilkan urutan penilaian yang tidak terhingga dilakukan terhadap elemen tak terhingga. Kedua-dua langkau dan pengurangan tidak akan kembali dari pelaksanaan penilaian kecuali kita membatasi aliran tak terbatas ke sejumlah elemen tertentu menggunakan operasi had .

Berikut adalah contoh kod di mana kami mengambil aliran yang tidak terhingga dan cuba mendapatkan elemen terakhir:

Stream stream = Stream.iterate(0, i -> i + 1); stream.reduce((first, second) -> second).orElse(null);

Akibatnya, aliran tidak akan kembali dari penilaian dan akhirnya akan menghentikan pelaksanaan program .

5. Kesimpulan

Kami melihat pelbagai cara untuk mendapatkan elemen terakhir dari Aliran baik menggunakan API pengurangan dan Langkau . Kami juga melihat mengapa ini tidak mungkin dilakukan dengan aliran yang tidak terhingga.

Kami melihat bahawa mendapatkan elemen terakhir dari Aliran tidak mudah dibandingkan dengan mengambilnya dari struktur data lain. Ini kerana sifat Aliran malas yang tidak dinilai melainkan fungsi terminal dipanggil dan kita tidak pernah tahu sama ada elemen yang dinilai sekarang adalah yang terakhir.

Coretan kod boleh didapati di GitHub.