Arşivler

Java Functional Interface Nedir?

Java 8 ile birlikte gelen Functional Interface özelliği Kullanım, Örnekler, Consumer, Predicate, Function, Supplier

Bu yazıda, Java 8 ile birlikte gelen Functional Interface özelliğinin ne olduğu ve nasıl kullanılacağına dair açıklamalar yapacağım. Ayrıca, bu özelliğin pratikte nasıl kullanılabileceğini gösteren örnekler de paylaşacağım.

Nedir?

Java’da bir fonksiyonel interface, bir abstract metot bulunan bir interface’dir. içeren bir arayüzdür. Functional interface’ler ile birlikte lambda ifadeleri de kullanabilir.

Kullanımı

Java’da bir fonksiyonel interface oluşturmak için, bir interface tanımlamanız gerekir ve bu interface sadece bir tane abstract metot tanımlamanız gerekir. @FunctionalInterface anotasyonunu belirterek fonksiyonel bir interface olduğunu belirtiyoruz.

@FunctionalInterface
public interface InterfaceExample {
    int apply(int x, int y);
}Code language: PHP (php)

Tanımlamasını yaptığımız fonkisyonel interface’yi lambda expression sayesinde kullanarak çağırabiliyoruzç

InterfaceExample sum = (x, y) -> x + y;
int result = sum.apply(3, 4);  

Java’da Functional Interfaceler

Java’da bazı hazır functional interfaceler barındırmaktadır.

Consumer

Consumer fonksiyonel interface, bir veri girişi olan ve geri bir değer döndürmeyen sınıftır. Bu sayede bir veri yapısını gezinebilir ve her bir öğeyi bir işlev gerçekleştirerek işleyebilirsiniz.

Consumer Örneği

public class Main {
  public static void main(String[] args) {
    
    List<String> list = List.of("burak", "ahmet", "mehmet");

    Consumer<String> printItem = item -> System.out.println(item);
    list.forEach(printItem);
  }
}
Code language: PHP (php)

Consumer interfacesi oluşturduk ve liste içindeki tüm öğeleri yazdıran bir metot yazdık. Çıktı aşağıdaki gibi olacaktır.

burak
ahmet
mehmet

Predicate

Predicate bir girdi alır ve bir boolean değeri döndürür.

Predicat Örneği

public class Main {
  public static void main(String[] args) {
    Predicate<Integer> pozitifMi = (sayi) -> sayi > 0;

    int[] sayilar = {-1, 0, 1, 2, 3};
    for (int sayi : sayilar) {
      if (pozitifMi.test(sayi)) {
        System.out.println(sayi + " pozitiftir");
      }
    }
  }
}
Code language: JavaScript (javascript)

Bir sayının pozitif olup olmadığı kontrol eden bir functional interface yazdık ve bu metot sayesinde liste içerisindeki değerleri kontrol edebiliyiriz.

Function 

Function bu tür bir fonksiyonel interfacedir ve bir girdi alır ve bir çıktı döndürüren işleve sahiptir.

Function Örneği

Mutlak değerini alan bir fonksiyonel interface yapıyalım. Bir çıktı döndüren Functiondan faydalanıyoruz.

public class Main {
  public static void main(String[] args) {
    Function<Integer, Integer> abs = (sayi) -> Math.abs(sayi);

    int[] numbers = {-1, 0, 1, 2, 3};
    for (int sayi : sayilar) {
      System.out.println(sayi + " mutlak değeri " + abs.apply(sayi));
    }
  }
}
Code language: PHP (php)

Supplier

Supplier interface bir değer döndürmeyen bir metotdur.

Supplier Örneği

public class Main {
  public static void main(String[] args) {

    Random random = new Random();
    Supplier<Integer> randomSupplier = () -> random.nextInt();
    System.out.println(randomSupplier.get());
  }
}
Code language: JavaScript (javascript)