Saya punya beberapa kode Java yang menyediakan objek dari items
. Ini membatasi mereka berdasarkan pada maxNumber
:
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.limit(maxNumber)
.collect(Collectors.toList());
Ini berfungsi dengan baik, tetapi pertanyaannya adalah ini: Apakah ada cara untuk melompati batasan kapan maxNumber == 0
?
Saya tahu saya bisa melakukan ini:
if (maxNumber == 0) {
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.collect(Collectors.toList());
} else {
items.stream()
.map(this::myMapper)
.filter(item -> item != null)
.limit(maxNumber)
.collect(Collectors.toList());
}
Tapi mungkin ada cara yang lebih baik, apakah ada yang terlintas dalam pikiran Anda?
sumber
Tidak, aliran pipa tidak memungkinkan untuk benar - benar melewati bagian mana pun dari pipa, jadi Anda terpaksa bekerja dengan logika kondisional di dalam langkah-langkah dan termasuk
limit()
selalu dalam jalur pipa, atau membangun aliran di bagian-bagian yang akan menjadi sedikit lebih terbaca (IMHO) daripada if / else dalam pertanyaanDalam kasus sederhana seperti di sini tidak ada banyak bedanya, tetapi Anda sering melihat dalam koleksi kode biasa melalui metode, dikonversi menjadi stream dan kemudian kembali ke koleksi. Dalam kasus seperti itu, mungkin merupakan ide yang lebih baik untuk bekerja dengan stream di beberapa bagian sampai Anda benar-benar perlu
collect()
.sumber