क्या कोई मुझे बता सकता है कि जावा में पाइथन के लैम्ब्डा फ़ंक्शंस के बराबर है या नहीं?जावा में पाइथन के लैम्ब्डा कार्यों के लिए समतुल्य?
उत्तर
एक विचार जेनेरिक public interface Lambda<T>
पर आधारित है - http://www.javalobby.org/java/forums/t75427.html देखें।
मुझे नहीं लगता कि वहां एक सटीक समतुल्य है, हालांकि अज्ञात वर्ग हैं जो आप जितना करीब प्राप्त कर सकते हैं। लेकिन अभी भी बहुत अलग है। जोएल स्पॉस्की ने एक लेख लिखा कि छात्रों ने केवल जावा सिखाया कि कैसे कार्यात्मक शैली प्रोग्रामिंग की इन सुंदरियों पर गायब हैं: Can Your Programming Language Do This?।
दुर्भाग्यवश, जावा में कोई लैम्बडा नहीं है। ,
interface MyLambda {
void theFunc(); // here we define the interface for the function
}
public class Something {
static void execute(MyLambda l) {
l.theFunc(); // this class just wants to use the lambda for something
}
}
public class Test {
static void main(String[] args) {
Something.execute(new MyLambda() { // here we create an anonymous class
void theFunc() { // implementing MyLambda
System.out.println("Hello world!");
}
});
}
}
जाहिर है इन अलग फ़ाइलों :(
लैम्ब्डा एक मूल्य ले सकता है और वापस कर सकता है । आप कॉल करने योग्य की तरह कुछ और चाहते हैं। – Dustin
पैरामीटर स्वीकार करने और मूल्यों को वापस करने में सक्षम होने के अलावा, लैम्ब्डा भी उन परिभाषाओं में स्थानीय चर का उपयोग कर सकते हैं जिन्हें वे परिभाषित किए गए थे।जावा में, अज्ञात कक्षाएं उन चर के चर में अंतिम चर का उपयोग कर सकती हैं, जिन्हें परिभाषित किया गया था, जो कि समान है। ओटीओएच, कुछ कॉल करने योग्य को लागू करने के लिए यह एक अच्छा विचार हो सकता है। – gooli
एक छोटा सा क्विबल: 'माईलांबडा' को एक अलग फ़ाइल में नहीं होना चाहिए; आप इसे 'कुछ' के आंतरिक, सार्वजनिक, स्थैतिक इंटरफ़ेस के रूप में घोषित कर सकते हैं। –
में होना चाहिए था आप: हालांकि, अगर आप गुमनाम वर्गों के साथ लगभग ही प्रभाव (एक बहुत बदसूरत तरीके से) प्राप्त कर सकते हैं एक अंतरफलक बना सकते हैं इस प्रकार
public interface myLambda<In, Out> {
Out call(In i);
}
आप लिखने के लिए सक्षम करने के लिए कहते हैं,
Function<MyObj, Boolean> func = new Function<MyObj, Boolean>() {
public Boolean callFor(myObj obj) {
return obj.canDoStuff();
};
MyObj thing = getThing;
if (func.callFor(thing)) {
doSomeStuff();
} else {
doOtherStuff();
}
यह अभी भी थोड़ा सा है, लेकिन इसमें कम से कम इनपुट/आउटपुट है।
मुझे लगता है कि आप उस दूसरे कोड स्निपेट के लाइन 5 पर एक ब्रैकेट खो रहे हैं। मैंने इसे खुद जोड़ने की कोशिश की, लेकिन स्टैक ओवरफ्लो मुझे लंबाई में केवल 1 वर्ण के संशोधन करने नहीं देगा। – falsePockets
हां,
जावा में जावा में लैम्ब्डा अभिव्यक्तियां पेश की गई हैं। लैम्ब्डा भाव के लिए
बेसिक वाक्य रचना कर रहे हैं:
(parameters)->
{
statements;
}
उदाहरण
(String s)->
{
System.out.println(s);
}
चेक इस लिंक:
http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
की रिहाई जावा 8, lambda- के साथ अभिव्यक्ति एन है ओउ उपलब्ध और जावा में लैम्ब्डा फ़ंक्शन वास्तव में अजगरों की तुलना में "अधिक शक्तिशाली" है।
पायथन में, लैम्ब्डा-अभिव्यक्ति में केवल उसके शरीर के लिए एक अभिव्यक्ति हो सकती है, और return
कथन की अनुमति नहीं है। जावा में, आप ऐसा कुछ कर सकते हैं: (int a, int b) -> { return a * b; };
और अन्य वैकल्पिक चीजें भी।
जावा 8 Function Interface
नामक एक और इंटरफेस भी पेश करता है। आप इसे भी देखना चाहेंगे।
पांच साल बाद, जावा 8 ने लैम्बडा एक्सप्रेशन को भाषा सुविधा के रूप में जोड़ा है और थोक डेटा ऑपरेशंस से निपटने के लिए एक नया स्ट्रीम एपीआई जोड़ा है। काफी समझ नहीं है, लेकिन अभी भी उपयोगी है। –
इसे देखें: [जावा 8 लैम्बडास क्लोजर हैं?] (Http://bruceeckel.github.io/2015/10/17/are-java-8-lambdas-closures/) –