जावा-स्ट्रीम (प्रतिस्थापन-लूप) [डुप्लिकेट]

Dec 01 2020

मैं जावा के लिए नया हूं और स्ट्रीम के साथ सिस्टम को समझने / सीखने की कोशिश कर रहा हूं।

एक उदाहरण में मेरे पास निम्नलिखित कोड हैं:

private Comment findComment(String author)
{                 
   for(Comments comment : comments) {
        if(comment.getAuthor().equals(author)) {
            return comment;
        }
    }
    return null;
}

प्रशिक्षण के उद्देश्य से मैंने अधिक अभ्यास प्राप्त करने के लिए धाराओं के साथ कुछ पुरानी पद्धति (उनमें से अधिकांश-छोरों के साथ) को फिर से लिखना शुरू किया। लेकिन इस छोटी सी विधि ने मुझे तीन से अधिक हमारे लिए javadocs (+ Google) के साथ रखा और मुझे अभी भी नहीं पता कि क्या गलत है - यह भी संकलित नहीं होगा: /

यहाँ मेरा "नया" कोड है जो उपरोक्त को बदलना चाहिए:

private Comment findComment(String author)
{
    return comments.stream()
              .filter(s -> author.equals(s.getAuthor()))
              .findFirst();
}

ArrayList टिप्पणियाँ (उस समय) किसी लेखक की केवल एक टिप्पणी को संग्रहीत कर सकती हैं। यदि कोई लेखक एक नई टिप्पणी लिखता है तो पुराना डिलीट हो जाता है। इसका मतलब होगा कि .find फ़र्स्ट (); वास्तव में आवश्यक नहीं है।

मेरी राय में, ArrayList को तब तक कम करना संभव है जब तक कि केवल एक ही वस्तु बची हो और इसे वापस विवरणी में न दे ... क्या मैं सही हूं या मैं कुछ भूल सकता हूं?

संपादित करें (01.12.2020, 10:13): मुझे पहला कोड स्निपेट संपादित करना था। रिटर्न स्टेटमेंट गलत था (टाइपो ...)

जवाब

1 Mureinik Dec 01 2020 at 05:47

findFirstएक रिटर्न Optional। Optionalइसे एक Commentवस्तु में बदलने के लिए , और उस मामले को संभालें, जहां कोई भी Commentऐसा नहीं है, जबकि आप उस पर हैं, आप इसका उपयोग कर सकते हैं orElse:

private Comment findComment(String author)
{
    return comments.stream()
              .filter(s -> author.equals(s.getAuthor()))
              .findFirst()
              .orElse(null); // Here
}