Ի՞նչ են Java-ի լամբդա արտահայտությունները և ինչ հնարավորություններ են դրանք առաջարկում:
sobes.tech AI
Պատասխան AI-ից
Լամբդա արտահայտությունները Java-ում կարճ ձև են անանուն ֆունկցիաներ (մեթոդներ առանց անունի) ստեղծելու համար, որոնք կարող են փոխանցվել որպես արգումենտներ կամ պահվել փոփոխականներում: Իրականում, դրանք ֆունկցիոնալ ինտերֆեյսներ են, որոնք իրականացնում են "լայն".
Լամբդա արտահայտությունների հիմնական հնարավորությունները:
-
Սինտաքսիսի պարզեցում: Ա significantly կրճատում են բոյլերփլեյթ կոդը ֆունկցիոնալ ինտերֆեյսների հետ աշխատելիս՝ համեմատած անանուն ներքին դասարանների:
// Նախքան լամբդան՝ Runnable classicRunnable = new Runnable() { @Override public void run() { System.out.println("Կլասիկական Runnable"); } }; // Լամբդայի հետ՝ Runnable lambdaRunnable = () -> System.out.println("Լամբդա Runnable"); -
Ֆունկցիոնալ ծրագրավորում: Հեշտացնում է ավելի ֆունկցիոնալ կոդ գրել, որտեղ ֆունկցիաները առաջին կարգի քաղաքացի են և կարող են փոխանցվել որպես տվյալներ: Սա կարևոր է Stream API-ի համար:
// Ցանկի ֆիլտրում լամբդայի միջոցով List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); List<String> filteredNames = names.stream() .filter(name -> name.startsWith("A")) .collect(Collectors.toList()); -
Աշխատանք Stream API-ի հետ: Լամբդա արտահայտությունները հիմնականում օգտագործվում են Stream API-ի մեծ մասի օպերացիաներում (filter, map, forEach, reduce և այլն), ապահովելով կարճ և հոսքային կատարման:
// Էլեմենտների փոխակերպում և արտածում stream-ից List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); numbers.stream() .map(n -> n * n) // լամբդա մապինգի համար .forEach(System.out::println); // մեթոդի հղում (լամբդայի տարբերակ) -
Բարելավված ընթերցելիություն: Պարզ գործողությունների համար լամբդան դարձնում է կոդը ավելի ընթեռնելի և հասկանալի, կենտրոնացնելով ուշադրությունը գործողության վրա՝ ոչ թե անանուն դասարանի սինտաքսիսին:
-
Ֆունկցիոնալ ինտերֆեյսների իրականացում: Կարող են օգտագործվել այնտեղ, որտեղ սպասվում է ֆունկցիոնալ ինտերֆեյսի օրինակ (մեկ աբստրակտ մեթոդով ինտերֆեյս):
Լամբդա արտահայտության սինտաքսիսը՝ (պարամետրեր) -> { մարմին }
Օրինակներ:
- Պարամետրեր չլինող, վերադարձ չպահանջող՝
() -> System.out.println("Hello") - Մի պարամետրով, վերադարձ չպահանջող՝
name -> System.out.println("Hello, " + name)(կարող է բաց թողնել փակագծերը մեկ պարամետրով) - Բազմապարամետրային, վերադարձ չպահանջող՝
(x, y) -> System.out.println(x + y) - Պարամետրերով, վերադարձով՝
(a, b) -> a + b(եթե մարմինը մի արտահայտություն է, նրա արժեքը անուղղակիորեն վերադառնում է) - Պարամետրերով, բլոկով և վերադարձով՝
(a, b) -> { int sum = a + b; return sum; }(հստակreturn-ը պահանջվում է բլոկների համար)