क्या जावा में कोई लाइब्रेरी है जो लिनक की कार्यक्षमता प्रदान करने के करीब है?
क्या जावा में कोई लाइब्रेरी है जो लिनक की कार्यक्षमता प्रदान करने के करीब है?
जवाबों:
पूर्ण LINQ क्वेरी सिंटैक्स प्राप्त करने के लिए, आपको भाषा की युक्ति और नए कीवर्ड और सिंटैक्स संरचना का समर्थन करने वाले कंपाइलरों के अपडेट की आवश्यकता होगी। यह यहां के अधिकांश पाठकों से परे है।
जावा में लाइनक जैसी विधि-श्रृंखला सिंटैक्स प्राप्त करने के लिए जो सी # में दिखता है और काम करता है, आपको दो चीजों की आवश्यकता है जो जावा समर्थन नहीं करता है; विस्तार विधियाँ (स्थैतिक विधियाँ जिन्हें किसी उदाहरण पर लागू किया जा सकता है जैसे कि यह एक आवृत्ति विधि है), और लैम्ब्डा एक्सप्रेशन (अनाम प्रतिनिधि)। हालांकि, उन दो को मौजूदा जावा कंस्ट्रक्शंस के साथ खराब किया जा सकता है, अगर आप थोड़ी अतिरिक्त कोडिंग क्रिया को अपनाने के लिए तैयार हैं। जावा के बारे में एक बात जो मुझे विशेष रूप से आश्चर्यजनक लगती है वह है गुमनाम इंटरफ़ेस कार्यान्वयन बनाने की क्षमता; एक एकल शुद्ध फ़ंक्शन के साथ एक इंटरफ़ेस पर लागू होता है, जो मूल रूप से सरल अनाम प्रतिनिधियों के लिए अनुमति देता है, बशर्ते आपके पास प्रत्येक विधि हस्ताक्षर के लिए एक इंटरफ़ेस हो, जिसकी आपको आवश्यकता होगी।
इसलिए, विधि श्रृंखला के रूप में, लिनक के IEnumerable (Javaheads के लिए Iterable) जावा में लगभग अनुमानित होना चाहिए; आप मूल रूप से इसे एक धाराप्रवाह इंटरफ़ेस के रूप में लागू करते हैं जो एक सनक को नियंत्रित करता है। LinqIterable
Iterable को लागू करने के लिए आपको एक वर्ग की आवश्यकता होगी , जो:
तो, आप शायद एक "धाराप्रवाह" पुस्तकालय को परिभाषित कर सकते हैं जो इस तरह के एक बयान की अनुमति देगा:
Map<String, Integer> results = Linq.FromIterable(sourceList)
.Where(new Predicate{public bool Op(SomeStruct in){return in.SomeString == "criteria";}})
.OrderBy(new Func{public String Op(SomeStruct in){return in.SomeOtherString;}})
.Select(new Func{public SomeOtherStruct Op(SomeStruct in){return new SomeOtherStruct(in.SomeOtherString, in.SomeInt);}})
.ToMap(new Func{public String Op(SomeOtherStruct in){return in.StringField;}},
new Func{public Integer Op(SomeOtherStruct in){return in.IntField;}});
वास्तविक पुस्तकालय का निर्माण इंटरनेट Q & A पर उत्तर के दायरे से परे एक अभ्यास है। मैंने कहा कि यह संभव था, आसान नहीं।
अभिव्यक्ति के पेड़ रॉकेट विज्ञान नहीं हैं, लेकिन यह इस क्षेत्र में .NET के कार्यान्वयन के लिए एक महत्वपूर्ण परियोजना होगी; न केवल आपको एक अभिव्यक्ति पेड़ बनाने की क्षमता की आवश्यकता है, आपको बायोटेक्स द्वारा उत्सर्जित मक्खी का उपयोग करके इस पेड़ को "संकलित" करने में सक्षम होने की आवश्यकता है; मुझे नहीं पता कि जावा का प्रतिबिंब काफी शक्तिशाली है।
देख:
नहीं। Linq में बहुत सारे langage फीचर्स की आवश्यकता होती है, जो कि Java में केवल dosent होता है
यहां बताए गए कारणों के लिए, स्काला का उपयोग करें :
Scala के .NET पोर्ट का उपयोग करें। यह आपको .NET में सब कुछ के लिए पूर्ण मूल पहुंच प्रदान करता है, जिसमें स्पष्ट रूप से LINQ शामिल है।
आप नहीं कर सकते हैं, तो आप की तरह libs उपयोग करने के लिए कोशिश कर सकते हैं functionjava या lambdaj , लेकिन आप LINQ करने के लिए वास्तव में बंद नहीं आ जाएगा।
मैं उन पुस्तकालयों की सूची में अमरूद को शामिल करूंगा जो आपको LINQ करता है।
लेकिन जैसा कि अन्य ने बताया है, शुद्ध जावा में कोई समान नहीं है।
आप क्लोर्ज में लिखे SQL प्रश्नों के लिए एक DSL, कोरमा का उपयोग कर सकते हैं ।
सिंटेक्स बहुत साफ है:
(select user
(with address)
(fields :firstName :lastName :address.state)
(where {:email "korma@sqlkorma.com"}))
आप प्रासंगिक Clojure पुस्तकालयों को आयात करके और सामान्य Clojure / Java इंटरॉप का उपयोग करके जावा से इसे बहुत आसानी से कॉल कर सकते हैं।
जावा में एक मूल विशेषता नहीं है जो लिनिक की नकल करता है। हालांकि, कई एपीआई हैं जो समान कार्यक्षमता प्रदान करते हैं।
उदाहरण के लिए, इस ब्लॉग पोस्ट में linq को दोहराने के लिए एक कस्टम जार है।
http://javaworldwide.blogspot.in/2012/09/linq-in-java.html
और यह पोस्ट से एपीआई का एक उदाहरण उपयोग है:
मान लीजिए कि हमारे पास एक एनिमल ऑब्जेक्ट है जिसका नाम और आईडी है जिसे एक सूची के साथ दर्शाया गया है animals
। यदि हम सूची से सभी पशु नाम प्राप्त करना चाहते हैं, जिसमें 'o' शामिल है animals
, तो हम निम्नलिखित क्वेरी लिख सकते हैं
from(animals).where("getName", contains("o")).all();
ब्लॉग पोस्टिंग में संदर्भित दो अन्य API हैं: lambdaJ और jLinq
where("getName", ...)
।