Streaming
Sebelum ke Jawa 8
for (Direction dir : Direction.values()) {
System.out.println(dir);
}
Java 8
Kami juga dapat menggunakan lambda dan stream ( Tutorial ):
Stream.of(Direction.values()).forEachOrdered(System.out::println);
Kenapa forEachOrdereddan tidakforEach dengan stream?
Perilaku forEacheksplisit nondeterministik di mana sebagai forEachOrderedmelakukan tindakan untuk setiap elemen aliran ini, dalam urutan pertemuan aliran jika aliran memiliki urutan pertemuan yang ditentukan. Jadi forEachtidak menjamin bahwa pesanan akan disimpan.
Juga ketika bekerja dengan stream (terutama yang paralel) perlu diingat sifat stream. Sesuai dokumen :
Hasil aliran pipa mungkin tidak deterministik atau salah jika parameter perilaku ke operasi aliran stateful. Lambda stateful adalah salah satu yang hasilnya tergantung pada negara yang mungkin berubah selama pelaksanaan pipa aliran.
Set<Integer> seen = Collections.synchronizedSet(new HashSet<>());
stream.parallel().map(e -> { if (seen.add(e)) return 0; else return e; })...
Di sini, jika operasi pemetaan dilakukan secara paralel, hasil untuk input yang sama dapat bervariasi dari satu menjalankan ke menjalankan, karena perbedaan penjadwalan thread, sedangkan, dengan ekspresi lambda stateless, hasilnya akan selalu sama.
Efek samping dalam parameter perilaku untuk mengalirkan operasi, secara umum, tidak disarankan, karena seringkali dapat menyebabkan pelanggaran tanpa disadari terhadap persyaratan kewarganegaraan, serta bahaya keselamatan benang lainnya.
Streaming mungkin atau mungkin tidak memiliki urutan pertemuan yang ditentukan. Apakah aliran memiliki urutan pertemuan atau tidak tergantung pada sumber dan operasi perantara.