Java'da lambda ifodalar nima va ular qanday imkoniyatlarni taqdim etadi?
sobes.tech AI
AIdan javob
Java'da lambda ifodalar, nomli bo'lmagan funksiyalarni (nomsiz metodlar) yaratish uchun qisqa sintaksis bo'lib, argument sifatida o'tkazilishi yoki o'zgaruvchilarda saqlanishi mumkin. Asosan, ular "zudlik bilan" amalga oshirilgan funksional interfeyslar.
Lambda ifodalarining asosiy imkoniyatlari:
-
Sintaksisni soddalashtirish: Anonim ichki sinflarga nisbatan funksional interfeyslar bilan ishlashda boilerplate kodni sezilarli darajada qisqartiradi.
// Lambda'dan oldin: Runnable classicRunnable = new Runnable() { @Override public void run() { System.out.println("Klassik Runnable"); } }; // Lambda bilan: Runnable lambdaRunnable = () -> System.out.println("Lambda Runnable"); -
Funktsional dasturlash: Ular funksiyalarni birinchi darajali fuqarolar qilish va ma'lumot sifatida o'tkazish imkonini beradi. Bu Stream API bilan ishlash uchun muhim element.
// Lambda yordamida ro'yxatni filtrlash List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); List<String> filteredNames = names.stream() .filter(name -> name.startsWith("A")) .collect(Collectors.toList()); -
Stream API bilan ishlash: Lambda ifodalar, Stream API'dagi ko'p operatsiyalar uchun asos bo'lib, qisqalik va parallel bajarishni ta'minlaydi.
// Stream elementlarini transformatsiya qilish va chiqarish List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); numbers.stream() .map(n -> n * n) // mapping uchun lambda .forEach(System.out::println); // metodga murojaat (lambda o'rniga) -
O'qilishi yaxshilash: Oddiy operatsiyalar uchun lambda kodni o'qilishi osonroq qiladi, operatsiyaga e'tibor qaratadi va nomli sinf sintaksisidan voz kechadi.
-
Funktsional interfeyslarni amalga oshirish: Ular har joyda ishlatilishi mumkin, u yerda funktsional interfeysning nusxasi kutilyapti (bir abstrakt metodga ega interfeys).
Lambda ifodasining sintaksisi: (parametrlar) -> { tana }
Misollar:
- Parametrlarsiz, qaytarmasdan:
() -> System.out.println("Salom") - Bir parametrli, qaytarmasdan:
name -> System.out.println("Salom, " + name)(bir parametr atrofidagi qavslar olib tashlanishi mumkin) - Bir nechta parametrli, qaytarmasdan:
(x, y) -> System.out.println(x + y) - Parametrlar bilan, qaytarmali:
(a, b) -> a + b(agar tana faqat bitta ifoda bo'lsa, uning qiymati avtomatik tarzda qaytariladi) - Parametrlar bilan, blok bilan va qaytarmali:
(a, b) -> { int sum = a + b; return sum; }(aniqreturnbloklar uchun talab qilinadi)