Lambda ifodalari misollar bilan. Yuqori darajadagi funktsiyalar va lambdalar


Download 37.33 Kb.
bet16/17
Sana25.10.2023
Hajmi37.33 Kb.
#1720034
1   ...   9   10   11   12   13   14   15   16   17
Bog'liq
Lambda ifodalari misollar bilan

Lambda ifodalariga misollar
Lambda iboralarini tushunishning eng yaxshi usuli bir nechta misollarni ko'rib chiqishdir:
Mavzuni ikki usulda ishga tushirish mumkin:
// Eski usul: new Thread(new Runnable() ( @Override public void run() ( System.out.println("Mavzudan salom"); ) )).start();
// Yangi usul: new Thread(() -> System.out.println("Mavzudan salom")).start();
Java 8 da hodisalarni boshqarish Lambda ifodalari orqali ham amalga oshirilishi mumkin. Quyida UI komponentiga ActionListener hodisasi ishlov beruvchisini qo‘shishning ikki yo‘li keltirilgan:
// Eski usul: button.addActionListener(new ActionListener() ( @Override public void actionPerformed(ActionEvent e) ( System.out.println("Tugma bosildi. Eski usul!"); ) ));
// Yangi usul: button.addActionListener((e) -> ( System.out.println("Tugma bosildi. Lambda!"); ));
Berilgan massivning barcha elementlarini ko'rsatishning oddiy misoli. E'tibor bering, lambda ifodasini ishlatishning bir nechta usullari mavjud. Quyida biz strelkalar sintaksisi yordamida oddiy usulda lambda ifodasini yaratamiz, shuningdek, Java 8 da oddiy usulni lambda ifodasiga aylantiradigan ikki nuqta operatoridan (::) foydalanamiz:
// Eski usul: Ro'yxat list = Arrays.asList(1, 2, 3, 4, 5, 6, 7); for(Integer n: list) ( System.out.println(n); )
// Yangi usul: Ro'yxat list = Arrays.asList(1, 2, 3, 4, 5, 6, 7); list.forEach(n -> System.out.println(n));
// Ikki nuqta operatoridan foydalanishning yangi usuli:: list.forEach(System.out::println);
Quyidagi misolda biz funksional interfeysdan foydalanamiz predikat test yaratish va ushbu testdan o'tgan narsalarni chop etish. Shu tarzda, siz lambda ifodalarida mantiqni qo'yishingiz va unga asoslangan biror narsa qilishingiz mumkin.
import java.util.Arrays; import java.util.List; import java.util.function.Predicate; public class Main ( public static void main(String a) ( List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7); System.out.print("Barcha raqamlarni chop etadi:"); baholash (ro‘yxat, (n)->to‘g‘ri); System.out.print("Hech qanday raqamni chop etmaydi: "); baholash (ro‘yxat, (n)->noto‘g‘ri); System.out.print("Juft sonlarni chop etish: "); baholash(roʻyxat, (n)-> n%2 == 0); System.out.print("Toq raqamlarni chop etish: "); baholash(roʻyxat, (n)-> n%2 == 1); System.out.print("5 dan katta raqamlarni chop etish: "); baholash (ro‘yxat, (n)-> n > 5); ) umumiy statik bekorlikni baholash (Ro'yxat ro'yxat, predikat predikat) ( for(Integer n: list) ( if(predicate.test(n)) ( System.out.print(n + " "); ) ) System.out.println(); ) )
Xulosa:
Barcha raqamlarni chop etadi: 1 2 3 4 5 6 7 Hech qanday raqamlarni chop etmaydi: Juft raqamlarni chop etadi: 2 4 6 Toq raqamlarni chop etadi: 1 3 5 7 5 dan katta raqamlarni chop etadi: 6 7
Lambda iboralari bilan shug'ullanib, ro'yxatning har bir elementining kvadratini chop etishingiz mumkin. E'tibor bering, biz oddiy ro'yxatni oqimga aylantirish uchun stream() usulidan foydalanamiz. Java 8 ajoyib Stream sinfini taqdim etadi ( java.util.stream.Stream). U tonnani o'z ichiga oladi foydali usullar, uning yordamida siz lambda ifodalarini ishlatishingiz mumkin. Biz lambda ifodasini o'tkazmoqdamiz x -> x*x map() usuliga, uni oqimdagi barcha elementlarga qo'llaydi. Keyin ro'yxatning barcha elementlarini chop etish uchun forEach dan foydalanamiz.
// Eski usul: Ro'yxat list = Arrays.asList(1,2,3,4,5,6,7); for(Integer n: list) ( int x = n * n; System.out.println(x); )
// Yangi usul: Ro'yxat list = Arrays.asList(1,2,3,4,5,6,7); list.stream().map((x) -> x*x).forEach(System.out::println);
Ro'yxat berilgan bo'lsa, siz ro'yxatning barcha elementlarining kvadratlari yig'indisini chop etishingiz kerak. Lambda iboralari sizga faqat bitta kod satri bilan erishishga imkon beradi. Bu misolda reduction() konvolyutsiya (kamaytirish) usuli qo'llaniladi. Har bir elementni kvadratga solish uchun map() usulidan foydalanamiz, so'ngra barcha elementlarni bitta raqamga yig'ish uchun kamaytirish() usulidan foydalanamiz.
// Eski usul: Ro'yxat list = Arrays.asList(1,2,3,4,5,6,7); int sum = 0; for(Integer n: list) ( int x = n * n; sum = sum + x; ) System.out.println(sum);
// Yangi usul: Ro'yxat list = Arrays.asList(1,2,3,4,5,6,7); int sum = list.stream().map(x -> x*x).reduce((x,y) -> x + y).get(); System.out.println(sum);

Download 37.33 Kb.

Do'stlaringiz bilan baham:
1   ...   9   10   11   12   13   14   15   16   17




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling