IntelliJ IDEA merekomendasikan kepada saya saat ini untuk mengganti setiap loop berikut dengan panggilan Java 8 "forEach":
for (Object o : objects) {
if (o instanceof SomeObject) {
doSomething();
}
}
Panggilan yang disarankan akan seperti ini:
objects.stream().filter(o -> o instanceof SomeObject).forEach(o -> doSomething());
Kecuali saya salah paham bagaimana fungsi dasar Stream bekerja, bagi saya sepertinya menggunakan stream adalah operasi O (2n) sebagai lawan dari operasi O (n) untuk standar untuk setiap loop.
java
performance
java8
Mirrana
sumber
sumber
Jawaban:
Java stream tidak mengulangi koleksi Anda sekali untuk setiap pernyataan, terlepas dari apa yang tersirat sintaksis. Itu berlaku seluruh rantai untuk setiap elemen, satu elemen pada suatu waktu.
Dalam kasus Anda, aliran akan beroperasi persis seperti loop. Ambil sebuah elemen, periksa terhadap predikat Anda, dan kemudian terapkan operasi Anda, lalu pindah ke elemen berikutnya.
sumber