जावा-स्ट्रीम (प्रतिस्थापन-लूप) [डुप्लिकेट]
मैं जावा के लिए नया हूं और स्ट्रीम के साथ सिस्टम को समझने / सीखने की कोशिश कर रहा हूं।
एक उदाहरण में मेरे पास निम्नलिखित कोड हैं:
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): मुझे पहला कोड स्निपेट संपादित करना था। रिटर्न स्टेटमेंट गलत था (टाइपो ...)
जवाब
findFirst
एक रिटर्न Optional। Optional
इसे एक Comment
वस्तु में बदलने के लिए , और उस मामले को संभालें, जहां कोई भी Comment
ऐसा नहीं है, जबकि आप उस पर हैं, आप इसका उपयोग कर सकते हैं orElse:
private Comment findComment(String author)
{
return comments.stream()
.filter(s -> author.equals(s.getAuthor()))
.findFirst()
.orElse(null); // Here
}