Kumpulan dokumentasi Cook Book (buku resep) Java 8 Stream API, berserta contoh-contoh pengunaan praktis yang siap pakai dalam berbagai kasus.
Untuk referensi mengenai pengenalan dan apa itu Java Stream API, silakan ke bagian Related Reference.
Dokumentasi ini ditulis dengan tujuan dan harapan dapat digunakan sebagai acuan cepat dalam pengunaan Java Stream API berserta libraries terkaitaa lainnya. Dokumentasi akan dibagi berdasarkan 3 fase stream API yaitu: Source, Intermediate Operation, Terminal Operation.
Sebelum memulai, silakan baca dahulu point-point dibawah ini:
-
Dokumentasi ini mengasumsikan bahwa pembaca telah memiliki pengetahuan dasar akan pemakaian dan pengoperasian Java 8 Stream API.
-
Untuk mencoba contoh-contoh dibawah, Anda membutuhkan instalasi Java Development Kit (JDK) versi 8 atau lebih tinggi. Akses ke link berikut untuk Download JDK 8
-
Untuk meminimalisir Boilerplate Code, pada sebagian skenario saya mengunakan library Lombok. Silakan baca cara instalasi dan pemakaian library Lombok nya. Atapun code-code yang tidak berkaitan hanya akan saya tulis sebagai informasi dalam komentar (remarks).
-
Untuk contoh-contoh yang mengunakan 3rd party library diluar JDK, akan saya sertakan link dan rujukan lebih lanjut nya. Untuk mempermudah library dependency management saya akan gunakan Maven.
-
Dokumentasi ini tidak dirilis maupun dimaintain secara versi, namun akan di-update secara terus menurut melalui repository GitHub ini. Hal ini juga merupakan alasan kenapa saya tidak menuliskan nya ke dalam Blog.
-
Sebagian dari contoh mungkin bukan merupakan solusi optimal/ efisien, hanya sebagai penyelesaian untuk mendapatkan hasil yang sesuai.
-
Untuk sementara waktu sampai struktur dokumentasi telah lebih solid. Saya menutup kolaborasi untuk dokumentasi ini. Apabila Anda memiliki ide ataupun masukan silakan diisi pada GitHub Issues.
Untuk membuat Stream dengan element range yang bertipe data Integer
:
IntStream.range(1, 11).forEach(System.out::print);
// print: 12345678910
Pada contoh diatas dibuat Stream yang memiliki element 1..10
, dan mencetak
keluar element tersebut.
Dengan cara yang hampir sama, untuk membuat Stream dengan element range
yang bertipe data Long
:
LongStream.range(0, 16).forEach(System.out::print);
// print: 0123456789101112131415
Secara sederhana misalkan kita memiliki List
ataupun array
seperti dibawah
ini kemudian hendak disorting:
Stream<String> fruits = Stream.of("papaya", "banana", "apple", "grape", "coconut");
fruits.sorted().forEach(System.out::println); // auto sort
dan hasilnya:
apple
banana
coconut
grape
papaya
Apabila kita memiliki class refrensi yang ada implements
class java.lang.Comparable<T>
secara benar, maka kita juga dapat secara langsung mengunakan method sorted
pada Stream
seperti contoh dibawah ini:
class Person implements Comparable<Person>{
private final String name;
public Person(String name) {
this.name = name;
}
@Override
public int compareTo(Person o) {
return name.compareTo(o.name);
}
@Override
public String toString() {
return this.name;
}
}
dan pada pengunaannya:
Stream<Person> persons = Stream.of(new Person("Charlie"),new Person("Andy"),new Person("Budi"));
persons.sorted().forEach(System.out::println);
akan tercetak:
Andy
Budi
Charlie
Cara lainnya apabila tanpa implements Comparable
adalah memanfaatkan static method java.util.Comparator.comparing
.
seperti contoh dibawah ini:
class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public String toString() {
return this.name;
}
}
pada pengunaannya:
Stream<Person> persons = Stream.of(new Person("Charlie"),new Person("Andy"),new Person("Budi"));
persons.sorted(comparing(Person::getName)).forEach(System.out::println);
Akan tercetak hasil yang telah terurut sama seperti contoh sebelumnya.
Contoh terdapat class Person
dan kita hendak sort
berdasarkan field name
kemudian age
:
class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return this.name;
}
}
Pada pengunaannya:
Stream<Person> persons = Stream.of(new Person("Michael",20),new Person("Andy",17),
new Person("Antony",10),new Person("Megan",9));
persons.sorted(comparing(Person::getName).thenComparing(Person::getAge)).forEach(System.out::println);
Serta hasilnya:
Andy (17)
Antony (10)
Megan (9)
Michael (20)
Berikut merupakan contoh-contoh yang mengunakan library/framework alternatif dari Java 8 Stream API.
Untuk rujukan lebih lanjut mengenai Streamex
Coming soon..
Untuk rujukan lebih lanjut mengenai Protonpack
Coming soon..
Untuk rujukan lebih lanjut mengenai jOOL
Coming soon..