Java Lambda – 5 : Fungsi sebagai masukan method

Tulisan ini adalah tentang bagaimana lambda menjadi sebuah masukan method. Seperti telah diketahui bahwa ekspresi lambda merupakan sebuah blok fungsi yang tidak terikat menjadi sebuah method di kelas apapun. Hanya saja deklarasi lambda dibantu oleh functional interface dengan satu method abstrak yang berfungsi untuk mendeskripsikan fungsinya. Functional interface ini dapat digunakan sebagai acuan untuk menjadikan ekspresi lambda menjadi masukan sebuah method dalam kelas. 

Sebagai contoh, akan dibuat sebuah interface yang secara umum dapat mengolah dua bilangan. Pengolahan dua bilangan, akan diimplementasikan oleh ekspresi lambda. Interface tersebut akan memiliki sebuah method abstrak dengan kembalian bertipe double, begitu pula untuk masukannya. Berikut adalah interface fungsional yang dimaksud :

@FunctionalInterface
interface PengolahDuaBilangan{
  public double proses(double bil1, double bil2);
}

Kemudian terdapat sebuah method dari sebuah kelas yang digunakan untuk menampilkan apapun hasil pengolahan dua bilangan di atas. Kita namai method tersebut prosesOutput, yang dapat menerima masukan berupa ekspresi lambda dan masukan dua bilangan. Method tersebut dapat digunakan untuk menampilkan luaran hasil pengolahan kedua bilangan yang dimasukkan. Berikut adalah kodenya :

public static void prosesOutput(PengolahDuaBilangan pdb, double bil1, double bil2) {
        double hasilProses = pdb.proses(bil1, bil2);
        System.out.println("Hasil Proses : " + hasilProses);
}

Method dapat memanfaatkan ekspresi lambda untuk menampilkan hasil penjumlahan maupun jumlah kuadrat sebagai berikut :

prosesOutput( (x, y) -> x + y , 1, 2);
PengolahDuaBilangan jumlahKuadrat = (x, y) -> Math.pow(x, 2) + Math.pow(y, 2);
prosesOutput(jumlahKuadrat, 2, 2);

Ekspresi lambda dapat digunakan sebagai masukan langsung, dengan menyebutkan ekspresinya pada method. Ekspresi lambda juga dapat dideklarasikan sebagai tipe interface seperti sebelumnya, kemudian reference type – nya yang digunakan sebagai masukan. Note : penjelasan mengapa tipe parameter lambda tidak dideklarasikan ada di sini.

Berikut adalah kode penuhnya :

@FunctionalInterface
interface PengolahDuaBilangan {

    public double proses(double bil1, double bil2);
}

public class ProcessNumber {

    public static void prosesOutput(PengolahDuaBilangan pdb, double bil1, double bil2) {
        double hasilProses = pdb.proses(bil1, bil2);
        System.out.println("Hasil Proses : " + hasilProses);
    }

    public static void main(String[] args) {
        prosesOutput((x, y) -> x + y, 1, 2);
        PengolahDuaBilangan jumlahKuadrat = (x, y) -> Math.pow(x, 2) + Math.pow(y, 2);
        prosesOutput(jumlahKuadrat, 2, 2);
    }
}

 

–end of note–

 

 

 

Leave a Reply

Your email address will not be published.