मैं स्ट्रीम के बारे में जानने की कोशिश कर रहा हूं और समस्या का सामना कर रहा हूं: मैं एक सूची का न्यूनतम मान प्राप्त करना चाहता हूं और इसे एक चर चर से असाइन करना चाहता हूं।जावा 8 स्ट्रीम "ifPresent"
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
int smallest = list.stream().min(Integer::compareTo).get();
System.out.println(smallest);
यह अच्छी तरह से काम करता है और मैं एक परिणाम के रूप 1
मिलती है: कि मैं निम्नलिखित किया था। मुद्दा यह है कि आईडीई चेतावनी देता है कि Optional.get
को .isPresent
की जांच करने से पहले बुलाया जाता है। ठीक करने के लिए मैं थोड़ा अलग ifPresent
विधि का इस्तेमाल किया और कोशिश की है कि निम्नलिखित:
int smallest = list.stream().min(Integer::compareTo).ifPresent(integer -> integer);
दुर्भाग्य से इस के बाद से मैं चेतावनी मिलती है काम नहीं करता: Bad return type in Lambda, Integer cannot be converted to void.
मेरा प्रश्न अंत में है: मैं कैसे करने के लिए न्यूनतम मूल्य प्रदान कर सकते हैं int smallest
वैरिएबल ifPresent की जांच के साथ?
आपको सबसे पहले समझना होगा कि आपको वैकल्पिक क्यों मिलता है, न कि पूर्णांक: क्योंकि स्ट्रीम खाली हो सकती है, और इस प्रकार कोई न्यूनतम मूल्य नहीं हो सकता है। फिर आपको यह तय करने की ज़रूरत है कि यदि परिणाम खाली है तो परिणामस्वरूप आप क्या प्राप्त करना चाहते हैं। फिर, एक बार जब आप जानते हैं कि आप क्या चाहते हैं, तो आप वैकल्पिक परिणाम के दस्तावेज़ीकरण को देखकर उस परिणाम को प्राप्त करने का सही तरीका चुन सकेंगे। –
'ifPresent'' उपभोक्ता 'को इसके तर्क के रूप में लेता है, जो इनपुट मान का उपभोग करता है और कुछ भी नहीं देता है। –