ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 7 · 2లో పాఠం 1కోర్సులో 13/14~12 min
మాడ్యూల్ పాఠాలు (1/2)

లాంబ్డా వ్యక్తీకరణలు

జావా 8 నుండి ప్రారంభించి, ఫంక్షనల్ ప్రోగ్రామింగ్ లాంబ్డా ఎక్స్‌ప్రెషన్స్ ద్వారా మద్దతు ఇస్తుంది. లాంబ్డా వ్యక్తీకరణ అనేది తప్పనిసరిగా అనామక పద్ధతి (పేరు లేని ఫంక్షన్), ఇది పద్ధతులకు వాదనగా పంపబడుతుంది లేదా వేరియబుల్స్‌లో నిల్వ చేయబడుతుంది.

ఫంక్షనల్ ఇంటర్‌ఫేస్‌లు

ఫంక్షనల్ ఇంటర్‌ఫేస్ అవసరమైన చోట మాత్రమే లాంబ్డా వ్యక్తీకరణ ఉపయోగించబడుతుంది. ఫంక్షనల్ ఇంటర్‌ఫేస్ అనేది ఖచ్చితంగా ఒక నైరూప్య పద్ధతిని ప్రకటించే ఇంటర్‌ఫేస్. జావా ఈ ఇంటర్‌ఫేస్‌లను ఐచ్ఛిక @FunctionalInterface ఉల్లేఖనతో గుర్తు చేస్తుంది.

వినియోగదారు నిర్వచించిన ఫంక్షనల్ ఇంటర్‌ఫేస్‌కి ఉదాహరణ:

Java
@FunctionalInterface
interface MathOperation {
    int operate(int a, int b);
}

జావా 8కి ముందు, మీరు అనామక అంతర్గత తరగతిని నిర్వచించవలసి ఉంటుంది. లాంబ్డాస్‌తో, వాక్యనిర్మాణం ఇలా సరళీకృతం చేయబడింది:

Java
MathOperation addition = (a, b) -> a + b;
int result = addition.operate(5, 3); // Returns 8

లాంబ్డా వ్యక్తీకరణల నిర్మాణం

లాంబ్డా యొక్క ప్రాథమిక వాక్యనిర్మాణం:

Code
(parameters) -> { body }
  • పరామితులు లేకుండా: () -> System.out.println("Hello")
  • ఒకే పరామితి: x -> x * 2 (కుండలీకరణాలను విస్మరించవచ్చు)
  • బహుళ పారామితులు: (x, y) -> x + y
  • మల్టీ-లైన్ బాడీ: శరీరం బహుళ స్టేట్‌మెంట్‌లను కలిగి ఉంటే, {} కలుపులు మరియు స్పష్టమైన return స్టేట్‌మెంట్ అవసరం.
Java
MathOperation detailedAddition = (a, b) -> {
    System.out.println("Adding...");
    return a + b;
};

జావాలో ప్రామాణిక ఫంక్షనల్ ఇంటర్‌ఫేస్‌లు

java.util.function ప్యాకేజీ అనేక అంతర్నిర్మిత ఫంక్షనల్ ఇంటర్‌ఫేస్‌లను అందిస్తుంది:

  • Predicate<T>: T రకం ఆర్గ్యుమెంట్‌ని అంగీకరిస్తుంది మరియు బూలియన్ (test(T t) పద్ధతి)ని అందిస్తుంది.
  • Consumer<T>: T రకం ఆర్గ్యుమెంట్‌ని అంగీకరిస్తుంది మరియు ఫలితాన్ని అందించకుండా ఆపరేషన్ చేస్తుంది (accept(T t) పద్ధతి).
  • Function<T, R>: ఒక ఆర్గ్యుమెంట్‌ను అంగీకరిస్తుంది T మరియు ఫలితాన్ని అందిస్తుంది R (apply(T t) పద్ధతి).
  • Supplier<T>: ఏ ఆర్గ్యుమెంట్‌లను అంగీకరించదు మరియు రకం T (get() పద్ధతి) విలువను అందిస్తుంది.

మీరే ప్రయత్నించండి

వ్యాయామం#java.m7.l1.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

రెండు పూర్ణాంకాలను జోడించే లాంబ్డా ఎక్స్‌ప్రెషన్‌ని ఉపయోగించి కాలిక్యులేటర్ ఇంటర్‌ఫేస్‌ను ఇన్‌స్టాంటియేట్ చేయడం ద్వారా కోడ్‌ను పూర్తి చేయండి. తర్వాత, 5 మరియు 3 దాటిన గణన పద్ధతిని అమలు చేయండి మరియు ఫలితాన్ని ముద్రించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

`కాలిక్యులేటర్ యాడర్ = (a, b) -> a + b;` అని ప్రకటించి, ఆపై ప్రింట్ కాల్‌లో `adder.calculate(5, 3)`ని పిలవండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#java.m7.l1.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

స్ట్రింగ్ పొడవు 5 అక్షరాల కంటే ఎక్కువగా ఉందో లేదో తనిఖీ చేసే లాంబ్డా ఎక్స్‌ప్రెషన్‌ని ఉపయోగించి isLong అనే ప్రామాణిక ఫంక్షనల్ ఇంటర్‌ఫేస్ ప్రిడికేట్<String> యొక్క ఉదాహరణను సృష్టించండి. ఆపై 'హలో వరల్డ్' కోసం పరీక్ష ఫలితాన్ని ప్రింట్ చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

`ప్రిడికేట్<String>` కోసం లాంబ్డా పరామితి `s`ని తీసుకుంటుంది మరియు `s.length() > 5`ని బూలియన్ కండిషన్‌గా అందిస్తుంది.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం#java.m7.l1.e3
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

స్ట్రింగ్స్ పేర్ల జాబితాను దానిపై సార్ట్() పద్ధతిని ప్రారంభించడం ద్వారా మరియు కంపారేటర్‌ని అమలు చేసే లాంబ్డా ఎక్స్‌ప్రెషన్‌ను పాస్ చేయడం ద్వారా అక్షరక్రమంగా క్రమబద్ధీకరించండి (రెండు స్ట్రింగ్‌లు s1, s2 తీసుకొని వాటిని compareTo ఉపయోగించి పోల్చడం).

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

జాబితాను స్థానంలో క్రమబద్ధీకరించడానికి `names.sort((s1, s2) -> s1.compareTo(s2));` ఉపయోగించండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది