Java Lambda – 10 : Supplier dan Consumer

Supplier dan Consumer seolah merupakan dua “saudara” dari functional interface. Supplier merupakan representasi interface yang berorientasi pada assignment yang menghasilkan nilai. Supplier memiliki method get() yang tidak memiliki parameter masukan dan hanya memiliki kembalian. Supplier berbeda dengan Consumer dalam hal input dan kembalian. Consumer merepresentasikan “objek yang harus dikonsumsi”. Oleh karena itu, Consumer memiliki sebuah method accept() dengan sebuah masukan.

Supplier

Supplier, karena berorientasi pada hasil/nilai, maka dapat digunakan untuk membuat instances. Supplier bisa digunakan untuk pembangkitan nilai, sequence number, atau yang lain. Contoh riil Supplier adalah penggunaannya pada logging yang digunakan sebagai message parameter. Contoh sederhana untuk ilustrasi Supplier sebagai logging adalah sebagai berikut :

import java.util.function.Supplier;

public class LambdaSupplier {

    public static void main(String[] args) {
        Supplier<String> warning = () -> {
            return "Ada warning di kode program baris 10.";
        };
        Supplier<String> deprecated = () -> {
            return "Fungsi baris 100 telah deprecated. Ganti dengan fungsi yang baru !";
        };        
        printString(warning, deprecated);
    }


    public static void printString(Supplier<String> ... input){
        for(Supplier<String> s : input){
            String display = s.get();
            System.out.println(display);
        }
    }
}

Pada kode di atas, Supplier digunakan untuk memberikan serangkaian pesan log yang dimasukkan pada method printString menggunakan varargs ( … ) untuk ditampilkan ke layar.  Method get() pada Supplier digunakan untuk mendapatkan nilai dari return yang dihasilkan.

Consumer

Consumer digunakan untuk membuat objek dikonsumsi, sebagai contoh kasus adalah pengiriman email. Email. Misal sebuah objek akan dikirimkan melalui email, maka nilai – nilai atribut objek tersebut akan diambil sebagai nilai yang akan dikirimkan. Ilustrasi pengiriman email menggunakan Consumer dapat dilihat pada kode berikut, dimana email dikirimkan melalui method accept() yang tersedia pada Consumer:

package id.lambda;

import java.util.function.Consumer;

class Email{
    private String to;
    private String content;

    public Email(String to, String content) {
        this.to = to;
        this.content = content;
    }
    
    public String getContent() {
        return content;
    }

    public String getTo() {
        return to;
    }
}

public class LambdaConsumer {
    
    public static void main(String[] args) {
        Consumer<Email> cons = (email) -> {
            //logic untuk kirim email
            System.out.println("Email ke " + email.getTo() + " telah dikirim.");
        };
        //mengirim email
        cons.accept(new Email("panji@panjinotes.web.id","Hello !"));
    }
}

 

–End of Note–

 

 

Leave a Reply

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