Lewati ke isi

๐Ÿ”ง Functional Interface di Java

Functional Interface adalah interface yang hanya memiliki satu method abstrak.
Cocok digunakan untuk: - Lambda Expression - Method Reference - Pemrograman fungsional


๐Ÿ“Œ Ciri Functional Interface

@FunctionalInterface
interface Pesan {
    void kirim(String isi);
}
````

* Hanya **satu method abstrak**
* Boleh memiliki method default atau static
* Anotasi `@FunctionalInterface` **tidak wajib**, tapi dianjurkan (untuk validasi)

---

## ๐Ÿง  Contoh Sederhana

```java
@FunctionalInterface
interface Hitung {
    int operasi(int a, int b);
}

Pemakaian dengan lambda:

Hitung tambah = (a, b) -> a + b;
System.out.println(tambah.operasi(3, 5)); // Output: 8

๐Ÿ“ฆ Interface Fungsional dari Java

Interface Method Abstrak Keterangan
Runnable run() Tanpa parameter, tanpa return
Callable<T> call() Tanpa parameter, return nilai
Comparator<T> compare(T o1, T o2) Untuk perbandingan dua objek
Consumer<T> accept(T t) Menerima input, tanpa return
Supplier<T> get() Tidak menerima input, return nilai
Function<T,R> apply(T t) Input โ†’ Output
Predicate<T> test(T t) Return boolean (true/false)

๐Ÿ” Contoh Nyata: Filter Data

List<String> nama = Arrays.asList("Ali", "Budi", "Cici");

Predicate<String> dimulaiDenganC = n -> n.startsWith("C");

nama.stream()
    .filter(dimulaiDenganC)
    .forEach(System.out::println); // Output: Cici

๐Ÿ’ก Kenapa Functional Interface Penting?

Alasan Penjelasan
Mendukung lambda expression Tanpa harus membuat class tambahan
Mendorong kode ringkas dan ekspresif Dekat dengan paradigma fungsional modern
Membuat Java tidak terasa kaku Cocok untuk pemrosesan data, event, dsb.

๐Ÿงช Interface Fungsional Kustom

@FunctionalInterface
interface Cetak {
    void tampil(String isi);
}

public class Demo {
    public static void cetakTeks(Cetak c) {
        c.tampil("Halo dari Java!");
    }

    public static void main(String[] args) {
        cetakTeks(s -> System.out.println(s));
    }
}

๐Ÿ“Œ Kesimpulan

Konsep Penjelasan
Functional Interface Hanya 1 method abstrak
@FunctionalInterface Untuk validasi compiler (tidak wajib)
Cocok untuk Lambda, stream, event, callback
Contoh built-in Runnable, Predicate, Function, dsb.

โžก๏ธ Lanjutkan eksplorasi ke: lambda_expression.md dan stream_api.md