Java 8 ile Hayatımıza Giren Yenilikler — Functional Interfaces ve Lambda Expression

Sümeyye Akay
Kodluyoruz
Published in
2 min readJul 24, 2020

Bu yazımda java 8 ile hayatımıza giren ve bize bir çok kolaylık sağlayan Functional Interfaces ve Lambda ifadeleri üzerinden konuşacağız.

Functional Interfaces

Functional Interfaces Nedir?

Bir interface’in functional olması için sadece bir adet abstract (yani implemente edilmemiş) metoda sahip olması yeterlidir.

  • Interfaces içinde sadece bir tane metod (Default olmayan) olmalıdır. Bu duruma Functional Interfaces denir.
  • Lambda ifadesini kullanabilmemiz için functional interface ihtiyacımız vardır.

Örnek olarak bir Functional Interfaces oluşturalım. Bu interface bize 2 double tipinde parametre alır ve double değer döner.

Şimdi bu double değerlerimizi kullanmak için bir Main sınıfı oluşturalım ve kullanıcıdan aldığımız değerler ile dört işlem yaptıralım.

Lambda ifadelerini daha iyi anlamak için önce bu örneğimizi Lambda ifadeleri hayatımıza girmeden önce kullanmış olduğumuz anonim sınıflarla yapalım. Böylelikle aralarındaki farkı daha iyi anlayabiliriz.

Yukarıdaki kodda anonim sınıflar ile oluşturmuş olduğumuz bu işlem aslında hayatımıza Lamda ifadeleri girdikten sonra ne kadar kolay hale geldiğini göreceksiniz :)

Lambda Expression

Sizin de görmüş olduğunuz gibi Lambda İfadeleri ile birlikte daha kısa kod yazarak ayni işlemi yapabildik. Böylece hem kod okunurluğu açısından hem de zaman açısından kazanç sağlamış olduk.

Bu farkı gördükten sonra Lambda İfadelerinin nasıl yazıldığına daha detaylı bir şekilde bakalım.

  • Buradaki mathOperation bizim interface sınıfımızdır.
  • (a,b) bizim parametrelerimizdir.
  • -> ise bizim Lambda operatörümüzdür.
  • Lambda ifadesi içine yazdığımız kodlar eğer tek satırdan oluşuyorsa, kod bloğu açmamıza gerek yoktur.
  • Lambda ifadesinde tek bir değer varsa parantez kullanmamıza gerek yoktur.
    p -> Integer.parseInt(p) * 2;
  • Eğer void olmayan bir değer döndüren Lambda ifademiz varsa ve biz bunu tek satırda yazmak istiyorsak return kullanmamalıyız.Çünkü java return ifadesini Lambda ifadesi olarak algılamıyor.

Lambda ifadelerini Metod Referansı şeklinde de kullanabiliriz. Var olan metodu göstermemizi sağlıyor. Amaç o metodu baştan yazmamaktır.

Bu metodları genellikle Util olarak adlandırılan sınıflarda yazarız.

Fonksiyonel Arayüzler

1) Function

Functional İnterface’dir. Bir nesnenin türünü değiştirmek için kullanılır.

String bir ifadeyi integer türüne değiştirmiş olduk.

2) Consumer

T türünde bir parametre alıyor. T türünde bir nesne alıp onun üzerinde işlem yapıyor yani onu tüketiyor.

Geriye bir değer döndürmüyor.

Burada bir array alıyoruz ve tüm elemanlarını 2 ile çarpıyoruz. Consumer bir parametre alır ve onun üzerinde işlem yapmamızı sağlar.

3) Supplier

Adından da anlaşılacağı üzere bize veri sağlıyor. Yani değer almıyor ve bize T türünde bir değer sağlıyor.

4) Predicate

Predicate doğrulamak demektir. Yani nesne üzerinde doğrulama yapmamızı sağlar.

Boolean değer döndürüyor. Yani test etmemizi sağlıyor. Bize True veya False değer dönüyor.

Mesela bir sayının tek mi çift mi olduğunu test etmek için;

Böylelikle fonksiyonel arayüzlerimizi tamamlamış olduk. Java 8 ile hayatımıza giren bu yenilikler sayesinde işlemlerimiz daha da kısa halde yapmış olduk.

Bu konu hakkında edinmiş olduğum detaylı bilgiler için kodluyoruz Java eğitmenim Yağız Ünsal’a teşekkür ederim :)

Bir sonraki yazımda görüşmek üzere, sağlıkla Kalın..

--

--