Skip to main content

For Each Operations

forEach Operations berfungsi untuk mengiterasi data satu persatu. Selain forEach, ada juga method lain yang dapat digunakan untuk melakukan for each, tapi tanpa harus melakukan terminal operation.

MethodKeterangan
forEach(T -> void)Melakukan iterasi satu per satu data di Stream. Ini adalah terminal operation
peek(T -> void)Melakukan iterasi satu per satu data di Stream, namun mengembalikan Stream lagi, dan ini bukanlah terminal operation
  • forEach: Operasi Terminal. Mengakhiri stream dan memulai eksekusinya. Tidak mengembalikan stream.
  • peek: Operasi Intermediate. Tidak memulai eksekusi stream. Digunakan untuk "mengintip" saat stream masih mengalir, dan akan mengembalikan stream asalnya. Sering digunakan terutama untuk debugging (pemecahan masalah) atau logging (mencatat) elemen-elemen stream saat mereka diproses oleh operasi lain.

forEach

Stream.of("Ucup", "Budi", "Joko")
.map(name -> {
System.out.println("Before change name to upper: " + name);
String upper = name.toUpperCase();
System.out.println("Change to Uppercase: " + upper);
return upper;
})
.forEach(name -> System.out.println("Final name " + name));

Output:

Before change name to upper: Ucup
Change to Uppercase: UCUP
Final name UCUP
Before change name to upper: Budi
Change to Uppercase: BUDI
Final name BUDI
Before change name to upper: Joko
Change to Uppercase: JOKO
Final name JOKO

peek

peek digunakan untuk "mengintip" saat stream masih mengalir, dan akan mengembalikan stream asalnya. Sering digunakan terutama untuk debugging (pemecahan masalah) atau logging (mencatat) elemen-elemen stream saat mereka diproses oleh operasi lain.

Stream.of("Ucup", "Budi", "Joko")
.peek(name -> System.out.println("Before change name to upper: " + name)) // melakukan peek data (mengintip), dengan melakukan iterasi elemen stream, dan mengembalikan stream asalnya
.map(String::toUpperCase)
.peek(upper -> System.out.println("Change to Uppercase: " + upper)) // melakukan peek data (mengintip), dengan melakukan iterasi elemen stream, dan mengembalikan stream asalnya
.forEach(name -> System.out.println("Final name " + name));

Output sama dengan sebelumnya:

Before change name to upper: Ucup
Change to Uppercase: UCUP
Final name UCUP
Before change name to upper: Budi
Change to Uppercase: BUDI
Final name BUDI
Before change name to upper: Joko
Change to Uppercase: JOKO
Final name JOKO