Java lambda ifodalari
Java lambda ifodalari
Lambda ifodalari Java 8 versiyasida qo‘shilgan.
Lambda ifodasi — parametrlarni qabul qilib, qiymat qaytaradigan qisqa kod bloki. Lambdalar metodlarga o‘xshaydi, lekin ularga nom kerak emas va ularni to‘g‘ridan-to‘g‘ri metod tanasi ichida yozish mumkin.
Sintaksis
Eng oddiy lambda ifodasi bitta parametr va bitta ifodadan iborat bo‘ladi:
parameter -> expression
Bir nechta parametrdan foydalanish uchun ularni qavs ichiga oling:
(parameter1, parameter2) -> expression
Oddiy ifodalar darhol qiymat qaytarishi kerak. Ular sikllar yoki if shartlari kabi bir nechta ko‘rsatmani (statement) o‘z ichiga ola olmaydi. Murakkabroq ishlarni bajarish uchun jingalak qavslar ichidagi kod blokidan foydalaning. Agar lambda qiymat qaytarishi kerak bo‘lsa, return kalit so‘zidan foydalaning:
(parameter1, parameter2) -> {
// code block
return result;
}
Lambda ifodalaridan foydalanish
Lambdalar ko‘pincha metodlarga argument sifatida uzatiladi. Masalan, lambdani ArrayList obyektining forEach() metodida ishlatishingiz mumkin:
Misol
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); });
}
}
O‘zgaruvchilardagi lambdalar
Lambda ifodasini o‘zgaruvchida saqlash mumkin. O‘zgaruvchining tipi aynan bitta metodga ega interfeys (funksional interfeys) bo‘lishi kerak. Lambda shu metodning parametrlari va qaytarish tipiga mos kelishi shart.
Java ko‘plab o‘rnatilgan funksional interfeyslarni o‘z ichiga oladi, masalan, ro‘yxatlar bilan ishlatiladigan Consumer (java.util paketidan).
Misol
import java.util.ArrayList;
import java.util.function.Consumer;
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);
Consumer<Integer> method = (n) -> { System.out.println(n); };
numbers.forEach(method);
}
}
Lambdalar metod parametrlari sifatida
Lambda ifodasini metodga ham uzatishingiz mumkin. Metodning parametri funksional interfeys bo‘lishi kerak. Shunda interfeys metodini chaqirish lambda ifodasini ishga tushiradi:
Misol
interface StringFunction {
String run(String str);
}
public class Main {
public static void main(String[] args) {
StringFunction exclaim = (s) -> s + "!";
StringFunction ask = (s) -> s + "?";
printFormatted("Hello", exclaim);
printFormatted("Hello", ask);
}
public static void printFormatted(String str, StringFunction format) {
String result = format.run(str);
System.out.println(result);
}
}
Anonim sinf va lambda ifodasi
Java 8+ versiyalarida anonim sinfni ko‘pincha lambda ifodasi bilan almashtirish mumkin — lekin faqat interfeys funksional interfeys (bitta abstrakt metodli) bo‘lsa.
Misol: bitta vazifa, ikki usul (bitta metodli interfeys):
Anonim sinf
// Functional interface (one abstract method)
interface Greeting {
void sayHello();
}
public class Main {
public static void main(String[] args) {
Greeting g = new Greeting() {
public void sayHello() {
System.out.println("Hello from anonymous class");
}
};
g.sayHello();
}
}
Lambda ifodasi
// Same functional interface
interface Greeting {
void sayHello();
}
public class Main {
public static void main(String[] args) {
Greeting g = () -> System.out.println("Hello from lambda");
g.sayHello();
}
}
Amaliy qoida: Qisqa, bitta metodli interfeyslar uchun lambda ifodasidan foydalaning. Bir nechta metodni qayta aniqlash, maydonlar qo‘shish yoki sinfdan meros olish kerak bo‘lganda anonim sinfdan foydalaning.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
