मैं कोड निम्नलिखित है:जावा धारा अप्रत्याशित परिणाम
Stream.of("Java", "Stream", "Test")
.peek(s -> System.out.print(s + " "))
.allMatch(s -> s.startsWith("J"));
यह मुझे क्यों मुद्रित करता जावा स्ट्रीम?
मैं कोड निम्नलिखित है:जावा धारा अप्रत्याशित परिणाम
Stream.of("Java", "Stream", "Test")
.peek(s -> System.out.print(s + " "))
.allMatch(s -> s.startsWith("J"));
यह मुझे क्यों मुद्रित करता जावा स्ट्रीम?
allMatch
शॉर्ट-सर्किटिंग ऑपरेशन है क्योंकि अधिकांश स्ट्रीम ऑपरेशन हैं। चूंकि allMatch
जल्दी लौट आया है इसलिए peek
केवल पहले दो तत्वों को प्रिंट कर रहा है।
क्योंकि allMatch()
जांचता है कि स्ट्रीम में हर कोई तत्व सत्य है या नहीं। और चूंकि दूसरा झूठा था, इसे आगे की जांच करने की आवश्यकता नहीं है।
तो peek()
तीसरे तत्व को मुद्रित नहीं करेगा।
हाँ, मुझे समझ में आया कि यह प्रत्येक तत्व के लिए निष्पादित नहीं किया गया था और यह मेरा सवाल था - क्यों? तो आप कहते हैं कि यह दूसरे तत्व पर निष्पादन बंद कर दिया और यही कारण है कि मैं केवल दो मान देखता हूं? – asdasdsdf
हां। क्योंकि 'allMatch()' के लिए दूसरा तत्व गलत था, स्ट्रीम समाप्त हो जाती है। –
यह भी देखें [जावा स्ट्रीम में वास्तव में केवल डीबगिंग के लिए सबसे अच्छा है?] (Https://stackoverflow.com/a/33636377/2711488) – Holger
सोचने के लोकप्रिय तरीके (और वास्तविक कार्यान्वयन) के विपरीत धाराओं के बारे में सोचना बेहतर है जैसे कि अंतिम ऑपरेशन धाराओं के बजाए तत्वों को खींच रहा था, उन्हें धक्का दे रहा था। – Dariusz