Sobes.tech
Junior

Խոսեք լամբդա արտահայտությունների և հղման մեթոդների մասին Java ծրագրավորման կոնտեքստում և դրանց կիրառության մասին Android զարգացման մեջ.

sobes.tech AI

Պատասխան AI-ից

Լամբդա արտահայտությունները կարճ նշանագրեր են անանուն ֆունկցիաներ ստեղծելու համար: Դրանք թույլ են տալիս փոխանցել ֆունկցիոնալությունը որպես արգումենտ մեթոդին կամ ստեղծել ֆունկցիա առանց նրա անունը նշելու: Սինտաքսը: (պարամետրեր) -> { մարմին }: Օգտագործվում են մեկ աբստրակտ մեթոդ ունեցող ինտերֆեյսների (ֆունկցիոնալ ինտերֆեյսներ) իրականացման համար:

Android-ում կիրառումը:

  • իրադարձությունների կառավարիչներ (կլիքներ, հպման իրադարձություններ):
  • լսողների ինտերֆեյսների իրականացում (օրինակ, OnClickListener, OnCompleteListener):
  • աշխատել API Stream-ի հետ՝ հավաքածուների մշակման համար (ֆիլտրում, փոխակերպում):
// Java 8-ից առաջ
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(context, "Կլիք!", Toast.LENGTH_SHORT).show();
    }
});

// Lambda արտահայտությամբ
button.setOnClickListener(v -> {
    Toast.makeText(context, "Կլիք!", Toast.LENGTH_SHORT).show();
});

Հղման մեթոդները ավելի կարճ ձև են՝ հղում կատարելու առկա մեթոդներին կամ կոնստրուկտորներին՝ առանց նրանց գործարկելու: Դրանք փոխարինում են միայն մեկ մեթոդ կանչող lambda արտահայտություններին:

Տիպերը՝

  • Ստատիկ մեթոդի հղում՝ Կլաս::ստատիկՄեթոդ
  • Օբյեկտի օրինակային մեթոդի հղում՝ օբյեկտ::մեթոդԱնուն
  • Տիպի ցանկացած օբյեկտի օրինակային մեթոդի հղում՝ Տիպ::մեթոդԱնուն
  • Կոնստրուկտորի հղում՝ Կլաս::new

Կիրառումը Android-ում:

  • Lambda արտահայտությունների կրճատում՝ լսողների հետ աշխատելիս:
  • Stream API-ում՝ մեթոդների կիրառումը տարրերի վրա:
// Lambda
List<String> անուններ = Arrays.asList("Alice", "Bob");
անուններ.forEach անուն -> System.out.println(անուն);

// Մեթոդի հղում
անուններ.forEach(System.out::println);

Առավելությունները՝

  • Կոդի ընթերցելիության բարելավում, հատկապես պարզ գործողությունների դեպքում:
  • Կոդի ավելի կարճ ձև:
  • Stream API-ում օգտագործումը դարձնում է հավաքածուների մշակումը ավելի ֆունկցիոնալ և արդյունավետ: