जावा में एप्लिकेशन लिखकर java.util.Collection
के लिए कई उपयोग मामले हैं। चूंकि java.util.stream.Stream
जावा 8 के साथ पेश किया गया था, इसलिए मैं कुछ उपयोग-मामलों में आया जहां यह तय करना मुश्किल है कि इसका उपयोग करना क्या है।स्ट्रीम या लूप का उपयोग करने के बीच निर्णय
उदाहरण के लिए: आप कुछ उपयोग विधियों को लिखने जा रहे हैं।
public static List<?> filterHashToList(int hash, Collection<?> toFilter) {
return toFilter.stream()
.filter((Object o) -> hash == o.hashCode())
.collect(Collectors.toCollection(LinkedList::new));
}
इस तरह यह लिखने के बारे में क्या:
public static List<?> filterHashToList(int hash, Collection<?> toFilter) {
List<Object> result = new LinkedList<>();
for(Object o : toFilter) {
if(hash == o.hashCode()) {
result.add(o);
}
}
return result;
}
दोनों ही तरीकों से एक ही परिणाम का उत्पादन होगा। java.util.stream.Stream
और java.util.stream.Collector
इंटरफेस हैं, इसलिए यदि मैं कस्टम स्ट्रीम और कलेक्टरों का उपयोग करता हूं तो कार्यान्वयन भी भिन्न हो सकता है।
मुझे लगता है कि पुराने-फ़ैशोइन किए गए लूप-मार्ग का उपयोग करके वहां बहुत सारे कार्यान्वयन हैं।
तो, क्या उपयोग के मामले में उपयोग, स्ट्रीम या लूप का उपयोग करना संभव है? और यदि हां, तो क्या सभी कार्यान्वयनों को अद्यतन किया जाना चाहिए जहां उचित हो?
या मुझे उपयोग विधियों को लागू करके दोनों तरीकों को भी प्रदान करना चाहिए? या क्या मुझे फ़िल्टरिंग प्रक्रिया के बाद स्ट्रीम को वापस लौटाया जाना चाहिए ताकि यदि आवश्यक हो तो आप उसके साथ भी काम कर सकते हैं?
स्ट्रीम के साथ आप वास्तव में आसान समांतरता प्राप्त कर सकते हैं, वे अधिक कॉम्पैक्ट हैं (कुछ "अधिक पठनीय" कहेंगे) और यदि आपके स्ट्रीम वास्तविक "धाराएं" हैं (कुछ गतिशील रूप से बहती है, गतिशील रूप से - एक पर आधारित नहीं है) यहां जैसे निश्चित संग्रह)। लेकिन आपके विशेष मामले में, मुझे लगता है कि आप किसी भी तरह से जा सकते हैं। – mastov
तो क्या हम इसे कम कर सकते हैं: स्ट्रीम को प्राथमिकता दी जाएगी, लेकिन आसान उपयोग में-दोनों मामले ठीक हैं? – narranoid
मैं दो सरल नियमों का उपयोग करूंगा: 1. यदि यह टूटा नहीं है, तो इसे ठीक न करें। 2. जो आप सबसे अधिक पठनीय और रखरखाव पाते हैं उसका उपयोग करें। उस ने कहा, आपके दो उदाहरण एक ही चीज़ वापस नहीं करते हैं: कोई एक ऐरेलिस्ट लौटाता है, और दूसरा एक लिंक्डलिस्ट देता है। –