
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()
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); } );
}
}
Çıktı
5
9
8
1
- 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 :
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); } );
}
}
Çıktı
5
9
8
1
- 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:
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);
}
}
Focus!
Spark?
SORULAR VE CEVAPLAR
-
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.
-
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.
-
Java lambda'nın dezavantajları nelerdir?
Java lambda işlevleri yalnızca işlevsel arayüzlerle kullanılabilir.
-
Az önce gösterilen sözdizimi kurallarına göre aşağıdakilerden hangisi geçerli lambda ifadeleri DEĞİLDİR?
-
() -> {}
-
() -> “focusspark”
-
() -> { return “focusspark”}
-
(Integer i) -> return “focusspark” + i;
-
(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”; }
. -
