दिलचस्प पोस्ट
ओपन एक्सएल को होमब्रे के साथ ओएस एक्स पर अपडेट करें Struts2: मानचित्र के अंदर "ऑब्जेक्ट की सूची" के मूल्यों को अद्यतन करना म्यूटक्स का उपयोग करते हुए एक आवेदन के सिंगल इंस्टेंस को चलाएं अजगर लिपि में एक पासवर्ड छिपा रहा है (केवल असुरक्षित अस्पष्टता) सी ++ में शुद्ध आभासी नाशक Google की एंड्रॉइड ओपनजीएल ट्यूटोरियल गलत रेखीय बीजगणित का शिक्षण है? मैं ASP.NET प्रपत्र पर एक चेकबॉक्स कैसे बना सकता हूं? जावास्क्रिप्ट ऑब्जेक्ट में प्रॉपर्टी नाम के रूप में परिवर्तनीय शब्दशः? फ्रैग्मेंट से गतिविधि शुरू करने के कारण NullPointerException एंड्रॉइड लाइब्रेरी प्रोजेक्ट के लिए जार कैसे बनाएं सर्वर पक्ष पेजिंग के साथ jqgrid क्लाइंट साइड सॉर्टिंग – डेटा गायब हो जाता है क्या मैं गुण वस्तुओं के साथ आत्मनिरीक्षण करता हूं और फिर इसे घटा देता हूं? साधा सरणी स्विफ्ट 3 Firebase onMessage पृष्ठभूमि में एप जब फोन नहीं कहा जाता है एक पॉपअप विंडो में डेटा पास करने का सबसे तेज़ तरीका मैंने खिड़की का उपयोग करके बनाया। Open ()?

Comparator.reversed () लैम्ब्डा का उपयोग संकलन नहीं करता है

मेरे पास कुछ उपयोगकर्ता ऑब्जेक्ट्स के साथ एक सूची है और मैं सूची को सॉर्ट करने की कोशिश कर रहा हूं, लेकिन केवल लैम्ब्डा एक्सप्रेशन के साथ विधि संदर्भ का उपयोग कर काम करता है, कंपाइलर एक त्रुटि देता है:

List<User> userList = Arrays.asList(u1, u2, u3); userList.sort(Comparator.comparing(u -> u.getName())); // works userList.sort(Comparator.comparing(User::getName).reversed()); // works userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error 

त्रुटि:

 com\java8\collectionapi\CollectionTest.java:35: error: cannot find symbol userList.sort(Comparator.comparing(u -> u.getName()).reversed()); ^ symbol: method getName() location: variable u of type Object 1 error 

वेब के समाधान से एकत्रित समाधान "Comparator.reversed () लैम्ब्डा का उपयोग संकलन नहीं करता है"

यह संकलक के प्रकार इनफ्रेंसिंग तंत्र में एक कमजोरी है लैम्ब्डा में u के प्रकार का अनुमान लगाने के लिए, लैम्ब्डा के लिए लक्ष्य प्रकार की स्थापना की आवश्यकता है। यह निम्नानुसार पूरा किया गया है userList.sort() प्रकार Comparator<User> की एक तर्क की उम्मीद कर रहा है पहली पंक्ति में, Comparator.comparing() को Comparator<User> वापस करने की आवश्यकता है इसका मतलब है कि Comparator.comparing() को Function आवश्यकता होती है जो User तर्क को लेती है। इस प्रकार पहली पंक्ति पर लैम्ब्डा में, u प्रकार का User होना चाहिए और सब कुछ काम करता है।

दूसरी और तीसरी लाइनों में, लक्ष्य टाइप करने के लिए कॉल की उपस्थिति से बाधित हो रहा reversed() मुझे पूरी तरह से यकीन नहीं है क्यों; दोनों रिसीवर और रिटर्न प्रकार के reversed() Comparator<T> ऐसा लगता है कि लक्षित प्रकार वापस रिसीवर को प्रचारित किया जाना चाहिए, लेकिन ऐसा नहीं है। (जैसे मैंने कहा, यह कमजोरी है।)

दूसरी पंक्ति में, विधि संदर्भ में अतिरिक्त प्रकार की जानकारी उपलब्ध है जो इस अंतर को भरती है। यह जानकारी तीसरी पंक्ति से अनुपस्थित है, इसलिए कंपाइलर आपको Object (आखिरी रिसोर्ट का अनुमान फॉलबैक) बताता है, जो असफल हो जाता है।

जाहिर है अगर आप किसी विधि संदर्भ का उपयोग कर सकते हैं, तो ऐसा करें और यह काम करेगा कभी-कभी आप एक विधि संदर्भ का उपयोग नहीं कर सकते, उदाहरण के लिए, अगर आप एक अतिरिक्त पैरामीटर देना चाहते हैं, तो आपको लैम्ब्डा अभिव्यक्ति का उपयोग करना होगा उस स्थिति में आप लैम्ब्डा में एक स्पष्ट पैरामीटर प्रकार प्रदान करेंगे:

 userList.sort(Comparator.comparing((User u) -> u.getName()).reversed()); 

भावी रिलीज में इस मामले को कवर करने के लिए कंपाइलर को बढ़ाया जाना संभव हो सकता है

आप द्वितीय तर्क के रूप में Comparator.reverseOrder() साथ दो तर्क तर्क Comparator.comparing का उपयोग करके इस सीमा के आसपास काम कर सकते हैं:

 users.sort(comparing(User::getName, reverseOrder()));