Lompati ke konten utama
Modul 7 · Pelajaran 1 dari 213/14 dalam kursus~12 min
Pelajaran modul (1/2)

Ekspresi Lambda

Mulai dari Java 8, pemrograman fungsional didukung melalui Ekspresi Lambda. Ekspresi lambda pada dasarnya adalah metode anonim (fungsi tanpa nama) yang dapat diteruskan sebagai argumen ke metode atau disimpan dalam variabel.

Antarmuka Fungsional

Ekspresi lambda hanya dapat digunakan jika Antarmuka Fungsional diperlukan. Antarmuka fungsional adalah antarmuka yang mendeklarasikan ** tepat satu metode abstrak **. Java menandai antarmuka ini dengan anotasi @FunctionalInterface opsional.

Contoh antarmuka fungsional yang ditentukan pengguna:

Java
@FunctionalInterface
interface MathOperation {
    int operate(int a, int b);
}

Sebelum Java 8, Anda harus mendefinisikan kelas dalam anonim. Dengan lambdas, sintaksnya disederhanakan menjadi:

Java
MathOperation addition = (a, b) -> a + b;
int result = addition.operate(5, 3); // Returns 8

Struktur Ekspresi Lambda

Sintaks dasar lambda adalah:

Code
(parameters) -> { body }
  • Tanpa parameter: () -> System.out.println("Hello")
  • Parameter tunggal: x -> x * 2 (tanda kurung dapat dihilangkan)
  • Beberapa parameter: (x, y) -> x + y
  • Badan multi-baris: jika isi berisi beberapa pernyataan, diperlukan kurung kurawal {} dan pernyataan return yang eksplisit.
Java
MathOperation detailedAddition = (a, b) -> {
    System.out.println("Adding...");
    return a + b;
};

Antarmuka Fungsional Standar di Java

Paket java.util.function menyediakan beberapa antarmuka fungsional bawaan:

  • Predicate<T>: menerima argumen bertipe T dan mengembalikan boolean (metode test(T t)).
  • Consumer<T>: menerima argumen bertipe T dan melakukan operasi tanpa mengembalikan hasil (metode accept(T t)).
  • Function<T, R>: menerima argumen T dan mengembalikan hasil R (metode apply(T t)).
  • Supplier<T>: tidak menerima argumen dan mengembalikan nilai bertipe T (metode get()).

Cobalah sendiri

Latihan#java.m7.l1.e1
Upaya: 0Memuat…

Lengkapi kode dengan membuat instance antarmuka Kalkulator menggunakan ekspresi lambda yang menambahkan dua bilangan bulat. Kemudian, aktifkan metode penghitungan yang melewati 5 dan 3, dan cetak hasilnya.

Memuat editor…
Tunjukkan petunjuk

Deklarasikan `Calculator adder = (a, b) -> a + b;` lalu aktifkan `adder.calculate(5, 3)` di dalam panggilan cetak.

Solusi tersedia setelah 3 upaya

Latihan#java.m7.l1.e2
Upaya: 0Memuat…

Buat instance antarmuka fungsional standar Predicate<String> bernama isLong menggunakan ekspresi lambda yang memeriksa apakah panjang string lebih besar dari 5 karakter. Kemudian cetak hasil tes 'hello world'.

Memuat editor…
Tunjukkan petunjuk

Lambda untuk `Predicate<String>` mengambil parameter `s` dan mengembalikan `s.length() > 5` sebagai kondisi boolean.

Solusi tersedia setelah 3 upaya

Latihan#java.m7.l1.e3
Upaya: 0Memuat…

Urutkan daftar nama string berdasarkan abjad dengan memanggil metode sort() di dalamnya dan meneruskan ekspresi lambda yang mengimplementasikan Comparator (mengambil dua string s1, s2 dan membandingkannya menggunakan bandingkanTo).

Memuat editor…
Tunjukkan petunjuk

Gunakan `names.sort((s1, s2) -> s1.compareTo(s2));` untuk mengurutkan daftar pada tempatnya.

Solusi tersedia setelah 3 upaya