मैं अभी एक सवाल भर आया जब एक 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तर्क पर लागू नहीं किया जाना चाहिए ?