मैं अभी एक सवाल भर आया जब एक List
और इसकी stream()
विधि का उपयोग कर । जबकि मुझे पता है कि उनका उपयोग कैसे करना है, मुझे यकीन नहीं है कि उनका उपयोग कब करना है।
उदाहरण के लिए, मेरे पास एक सूची है, जिसमें विभिन्न स्थानों के लिए विभिन्न पथ हैं। अब, मैं यह जाँचना चाहूंगा कि क्या किसी एकल, दिए गए पथ में सूची में निर्दिष्ट पथ हैं। मैं boolean
शर्त के आधार पर लौटना चाहता हूं कि क्या शर्त पूरी हुई या नहीं।
यह निश्चित रूप से, प्रति से एक कठिन कार्य नहीं है। लेकिन मुझे आश्चर्य है कि क्या मुझे स्ट्रीम, या फॉर-इन (लूप) का उपयोग करना चाहिए।
सूचि
private static final List<String> EXCLUDE_PATHS = Arrays.asList(new String[]{
"my/path/one",
"my/path/two"
});
उदाहरण - धारा
private boolean isExcluded(String path){
return EXCLUDE_PATHS.stream()
.map(String::toLowerCase)
.filter(path::contains)
.collect(Collectors.toList())
.size() > 0;
}
उदाहरण - फॉर-हर लूप
private boolean isExcluded(String path){
for (String excludePath : EXCLUDE_PATHS) {
if(path.contains(excludePath.toLowerCase())){
return true;
}
}
return false;
}
ध्यान दें कि path
पैरामीटर हमेशा निचला होता है ।
मेरा पहला अनुमान है कि फॉर-एप्रोच तेज़ है, क्योंकि अगर शर्त पूरी हो जाती है तो लूप तुरंत लौट आएगा। जबकि फ़िल्टरिंग को पूरा करने के लिए स्ट्रीम अभी भी सभी सूची प्रविष्टियों पर लूप करेगी।
क्या मेरी धारणा सही है? यदि हां, तो मैं क्यों (या बल्कि कब ) का उपयोग करूंगा stream()
?
new String[]{…}
है। बस उपयोगArrays.asList("my/path/one", "my/path/two")
String[]
, तो कॉल करने की कोई आवश्यकता नहीं है Arrays.asList
। आप केवल सरणी का उपयोग करके स्ट्रीम कर सकते हैं Arrays.stream(array)
। वैसे, मुझे isExcluded
परीक्षण के उद्देश्य को पूरी तरह से समझने में कठिनाइयाँ हैं। क्या यह वास्तव में दिलचस्प है कि क्या तत्व का EXCLUDE_PATHS
शाब्दिक अर्थ पथ के भीतर कहीं निहित है? यानी isExcluded("my/path/one/foo/bar/baz")
वापसी होगी true
, साथ ही isExcluded("foo/bar/baz/my/path/one/")
…
Arrays.stream
विधि की जानकारी नहीं थी, इस ओर इशारा करने के लिए धन्यवाद। दरअसल, मैंने जो उदाहरण पोस्ट किया है वह मेरे अलावा किसी और के लिए काफी बेकार लगता है। मैं isExcluded
विधि के व्यवहार से अवगत हूँ , लेकिन यह वास्तव में सिर्फ कुछ है जो मुझे खुद के लिए चाहिए, इस प्रकार, आपके प्रश्न का उत्तर देने के लिए: हाँ , यह उन कारणों के लिए दिलचस्प है जिनका मैं उल्लेख नहीं करना चाहता, क्योंकि यह दायरे में फिट नहीं होंगे। मूल प्रश्न का।
toLowerCase
स्थिरांक पर आवेदन क्यों किया जाता है जो पहले से ही लो-केस है? क्या इसे path
तर्क पर लागू नहीं किया जाना चाहिए ?