Sefa Demirtaş

Sefa Demirtaş

#java

Java Lambda Expressions

Java Lambda Expressions
0 views
3 min read
#java

Java

Lambda ifadeleri Java 8 le birlikte kullanılmaya başlandı.

Lambda ifadesi, parametreleri alan ve bir değer döndüren kısa bir kod bloğudur. Lambda ifadeleri metodlara enzer ancak bir isme ihtiyaç duymazlar ve doğrudan bir metodun gövdesine uygulanabilirler.

Syntax

En basit lambda ifadesi tek bir parametre ve bir ifade içerir.

parametre -> expression

Birden fazla parametre kullanmak için parantez içine alırız

(parametre1, parametre2) -> expression

İfadeler sınırlıdır. Hemen bir değer döndürmeleri gerekir değişkenler, atamalar veya ifadeler içermezler if ve/veya for. Daha karmaşık işlemler yapabilmek için küme parantezleri içeren bir kod bloğu kullanabilirler. Lambda ifadesinin bir değer döndürmesi gerekiyorsa kod bloğunda bir return ifadesi bulunmalıdır.

(parameter1, parameter2) -> { CodeBlog }

Lambda İfadelerini Kullanma

  • Listedeki her öğeyi yazdırmak için ArrayList yönteminde bir lambda ifadesi kullanılır: forEach()
Main.java
import java.util.ArrayList;

public class Main {
 public static void main(String[] args) {
   ArrayList<Integer> numbers = new ArrayList<Integer>();
   numbers.add(5);
   numbers.add(9);
   numbers.add(8);
   numbers.add(1);
   numbers.forEach( (n) -> { System.out.println(n); } );
 }
}
Java Metod

Çıktı

console
5
9
8
1
Console Çıktısı
  • Değişkenin türü yalnızca bir yönteme sahip bir arayüz ise, Lambda ifadeleri değişkenlerde saklanabilir. Lambda ifadesi, bu yöntemle aynı sayıda parametreye ve aynı dönüş türüne sahip olmalıdır. Consumer Java, listeler tarafından kullanılan arayğxz gibi bu tür arayüzlerin çoğunu yerleşik olarak içerir.
    • Consumer Bir lambda ifadesini bir değişkende saklamak için Java'nın arayüzünü kullanın :
Main.java
import java.util.ArrayList;

public class Main {
 public static void main(String[] args) {
   ArrayList<Integer> numbers = new ArrayList<Integer>();
   numbers.add(5);
   numbers.add(9);
   numbers.add(8);
   numbers.add(1);
   numbers.forEach( (n) -> { System.out.println(n); } );
 }
}
Java Metod

Çıktı

console
5
9
8
1
Console Çıktısı
  • Bir yöntemde lambda ifadesi kullanmak için yöntemin türü olarak tek yöntemli arayüze sahip bir parametreye sahip olması gerekir. Arayüzün yöntemini çağırmak lambda ifadesini çalıştıracaktır:
Main.java
interface StringFunction {
  String run(String str);
}

public class Main {
  public static void main(String[] args) {
    StringFunction exclaim = (s) -> s + "!";
    StringFunction ask = (s) -> s + "?";
    printFormatted("Focus", exclaim);
    printFormatted("Spark", ask);
  }
  public static void printFormatted(String str, StringFunction format) {
    String result = format.run(str);
    System.out.println(result);
  }
}
Java Metod
console
Focus!
Spark?
Console Çıktısı

SORULAR VE CEVAPLAR

  1. Lambda ne tür bir Java ifadesidir?

    Java Lambda İfadeleri, girişi parametre olarak kabul eden ve sonuç değerini döndüren kısa kod bloğudur.

  2. Java'da lambda ifadelerini kullanmak gerekir mi?

    Evet, lambda ifadelerinin kullanılması diğer API'lerin kullanımını ve desteklenmesini kolaylaştırır.

  3. Java lambda'nın dezavantajları nelerdir?

    Java lambda işlevleri yalnızca işlevsel arayüzlerle kullanılabilir.

  4. Az önce gösterilen sözdizimi kurallarına göre aşağıdakilerden hangisi geçerli lambda ifadeleri DEĞİLDİR?

    1. () -> {}

    2. () -> “focusspark”

    3. () -> { return “focusspark”}

    4. (Integer i) -> return “focusspark” + i;

    5. (String s) -> {focusforfocus}

    4. ve 5. geçersiz lambdalardır, geri kalanı geçerlidir.

    1. Bu lambdanın hiçbir parametresi yoktur ve void değerini döndürür. Boş gövdeli bir yönteme benzer: public void run() { }.

    2. Bu lambdanın hiçbir parametresi yoktur ve ifade olarak bir String döndürür.

    3. Bu lambdanın hiçbir parametresi yoktur ve bir String döndürür (bir blok içinde açık bir return ifadesi kullanarak).

    4. return bir kontrol akışı ifadesidir. Bu lambdayı geçerli kılmak için küme parantezleri aşağıdaki gibi gereklidir: (Integer i) -> { return “focusspark” + i; }

    5. "Focus for focus " bir ifade değil, bir ifadedir. Bu lambdayı geçerli kılmak için küme parantezlerini ve noktalı virgülü şu şekilde > kaldırabilirsiniz: (String s) -> “focus for focus”.. Veya isterseniz aşağıdaki gibi açık bir return ifadesi kullanabiliriz : (String s) -> { return focus for focus”; }.

# Related categories
Table Of Content