Skip to main content

Apa itu Java Stream?

Java Stream diperkenalkan pertama kali di Java versi 8 atau 1.8. Java Stream adalah alur elemen yang mendukung operasi fungsional seperti filtering, mapping, dan looping.

🤔 Fitur Java Stream

  • Stream bukan struktur data — tidak menyimpan apa pun — tetapi beroperasi pada data dari collection, array, atau input I/O.
  • Stream bersifat fungsional. Operasi yang dilakukan pada Stream tidak mengubah data sumbernya. Misalnya, melakukan filter pada Stream yang diperoleh dari suatu Collection akan menghasilkan Stream baru tanpa elemen yang difilter, tanpa menghapus elemen dari sumber Collection.
  • Stream bersifat lazy dan akan memproses kode program hanya ketika ketika diperlukan.
  • Elemen-elemen pada Stream hanya dijalankan satu kali selama Stream tersebut berlangsung. Seperti pada Iterator, Stream baru harus dihasilkan untuk mmenjalankan kembali elemen-elemen yang sama dari sumbernya.

java stream

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

📚 Konsep Stream Pipeline

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

  1. Intermediate Operations
  2. Terminal Operations

Setiap Intermediate Operations akan mengembalikan nilai Stream lagi. Akibatnya, kita dapat membuat pipeline pemrosesan dengan jumlah Intermediate Operations secara bebas untuk memproses data.

Stream kemudian harus dihentikan menggunakan Terminal Operations yang mengembalikan nilai akhir.

stream intermediate operation dan steam terminal operation

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

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>

Di bawah ini merupakan properties class Stream pada paket java.util.stream di Java 21. Method kemungkinan akan bertambah di kemudian hari, seiring peningkatan versi Java.

java stream

Sifat Java Stream

Secara default, Stream itu bersifat Cold, artinya data di Stream tidak akan mengalir sampai kita memintanya. Ada banyak cara untuk meminta Stream mulai mengalirkan datanya, dengan menggunakan Stream Operations. Stream hanya bisa jalan sekali, mirip seperti aliran data, setelah mengalir, aliran data tidak bisa diulang lagi dari awal.

🌐 Baca Juga