Sobes.tech
Middle

Ի՞նչ են 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-ը պահանջվում է բլոկների համար)