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. Java Stream bukan struktur data — tidak menyimpan apa pun — tetapi beroperasi pada data dari collection, array, atau input I/O.
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.
source: https://logicmojo.com/java8-feature-questions
1️⃣ Java Stream Intermediate Operations
Intermediate operations bersifat lazy operations yang berfungsi:
- Mengubah atau memfilter elemen dalam aliran
- Tidak dapat menghasilkan hasil akhir sampai Terminal Operation dipanggil
- 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
Operations | Description | Return Type |
---|---|---|
forEach() | Menerapkan tindakan pada setiap item | void |
toArray() | Konversi elemen stream ke array | T[] |
collect() | Menerapkan elemen ke Collection/map/string | R(varies) |
reduce() | Melakukan reduksi pada elemen menggunakan operator biner | Optional<T> or <T> |
min() | Nilai minimum dari comparator | Optional<T> |
max() | Nilai maximal dari comparator | Optional<T> |
count() | Jumlah element | long |
anyMatch() | Mengembalikan true jika ada elemen cocok dengan predicate yang diberikan | boolean |
allMatch() | Mengembalikan true jika semua elemen cocok dengan predicate yang diberikan | boolean |
noneMatch() | Mengembalikan true jika tidak ada elemen cocok dengan predicate yang diberikan | boolean |
findFirst() | Mengembalikan elemen pertama (jika ada) | Optional<T> |
findAny() | Mengembalikan elemen apapun | Optional<T> |
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.