Java Lambda – 9 : java.util.function.Predicate

Predicate secara singkat merupakan fungsi yang menghasilkan nilai boolean (benar atau salah). Java menyediakan kelas untuk membungkus predicate pada java.util.function.Predicate. Kelas ini bermanfaat misalnya ketika melakukan filtering sebuah object Collection. Berikut adalah contoh penggunaan Predicate :

Predicate<Integer> pred = (i) -> i>10;
boolean t = pred.test(100); // hasil : true
t = pred.negate().test(100); //hasil : false

Kode di atas menguji apakah sebuah integer itu lebih besar atau 10. Pengujian menggunakan method test, dengan masukan sesuai dengan tipe parameter kelas, dalam hal ini Integer. Method negate untuk menghasilkan nilai negasi atau kebalikan dari nilai sebenarnya. method negate digunakan pada saat method test dipanggil.

Interface Predicate memiliki fungsi and() dan or() untuk menguji kondisi-kondisi yang lebih dari satu seperti berikut :

Predicate<Integer> lebihDari10 = (i) -> i>10;
Predicate<Integer> kurangDari20 = (i) -> i<20;
boolean result = lebihDari10.and(kurangDari20).test(14);

variabel result akan berisi hasil pengujian apakah angka 14 lebih dari 10 dan kurang dari 20.

Penggunaan Predicate pada Collection

Predicate dapat digunakan pada Collection, untuk melakukan filtering. Sebagai contoh, kode berikut merupakan kode untuk menambahkan sebuah list of integer :

List<Integer> intList = new ArrayList<Integer>();
intList.add(10);
intList.add(11);
intList.add(12);
intList.add(13);
intList.add(14);

Sebuah fungsi dengan nama flterAngka , akan digunakan untuk memproses list angka tersebut :

public static List<Integer> filterAngka(List<Integer> list,Predicate<Integer> p){
    List<Integer> newList = new ArrayList<Integer>();
    for(Integer num : list){
        if(p.test(num)) newList.add(num);
    }
    return newList;
}

Kode di atas memanfaatkan interface Predicate sebagai masukan. Selanjutnya, proses filtering dengan ekspresi lambda akan dibentuk, kemudian ditampilkan :

Predicate<Integer> genapFilter = (x) -> {
    return x % 2 == 0;
};
System.out.println(filterAngka(intList, genapFilter));

 

— end of note —

Leave a Reply

Your email address will not be published. Required fields are marked *