Skip to main content

Stream Operation

Berbeda dengan Java Collection, di Java Stream hal yang sangat menarik adalah fitur Stream Operations nya. Stream Operations adalah kumpulan operasi-operasi yang bisa kita gunakan untuk memanipulasi Stream itu sendiri. Ada banyak sekali jenis-jenis Stream Operations yang nanti akan kita bahas satu persatu. Namun secara garis besar, Stream Operations tidak akan memodifikasi data aslinya, melainkan hasil dari Stream Operations adalah sebuah Stream baru.

stream intermediate operation dan steam terminal operation

source: https://logicmojo.com/java8-feature-questions

Konsep Stream Pipeline adalah penghubung antar operasi/operation. Operasi pada Stream pipeline terbagi menjadi dua kategori:

1. Intermediate Operations 2. Terminal Operations

1️⃣ Java Stream Intermediate Operations

Intermediate operations bersifat lazy operations yang berfungsi:

  1. Mengubah atau memfilter elemen dalam aliran
  2. Tidak dapat menghasilkan hasil akhir sampai Terminal Operation dipanggil
  3. Dapat dirantai untuk membangun alur stream pipeline

Method Intermediate Operation yang sering digunakan

  • filter()
  • map()
  • flatMap()
  • distinct()
  • sorted()
  • peek()
  • limit()
  • skip()
  • takeWhile() (Java 9+)
  • dropWhile() (Java 9+)

2️⃣ Java Stream Terminal Operations

Terminal Operations adalah final step dalam stream pipeline, yang bersifat:

  • Menghasilkan result (collection, number, boolean, dll.)
  • Akan melakukan Trigger stream execution
  • Akan melakukan Consume terhadap stream (stream tidak dapat digunakan kembali)

Method Terminal Operation yang sering digunakan

OperationsDescriptionReturn Type
forEach()Menerapkan tindakan pada setiap itemvoid
toArray()Konversi elemen stream ke arrayT[]
collect()Menerapkan elemen ke Collection/map/stringR(varies)
reduce()Melakukan reduksi pada elemen menggunakan operator binerOptional<T> or <T>
min()Nilai minimum dari comparatorOptional<T>
max()Nilai maximal dari comparatorOptional<T>
count()Jumlah elementlong
anyMatch()Mengembalikan true jika ada elemen cocok dengan predicate yang diberikanboolean
allMatch()Mengembalikan true jika semua elemen cocok dengan predicate yang diberikanboolean
noneMatch()Mengembalikan true jika tidak ada elemen cocok dengan predicate yang diberikanboolean
findFirst()Mengembalikan elemen pertama (jika ada)Optional<T>
findAny()Mengembalikan elemen apapunOptional<T>

Contoh

List<String> burung = List.of("Merpati", "Perkutut", "Pipit");

Stream<String> streamBurung = burung.stream();
Stream<String> burungUpper = streamBurung.map(String::toUpperCase); // Intermediate Operation

burung.forEach(System.out::println); // Terminal Operation
burungUpper.forEach(System.out::println); // Terminal Operation

Output:

Merpati
Perkutut
Pipit
MERPATI
PERKUTUT
PIPIT