मैं जावा 8 स्ट्रीम के साथ काम कर रहा हूं, और उन्हें डीबग करने के तरीके के साथ आना चाहूंगा। इसलिए मैंने सोचा कि मैं एक फिल्टर है कि धारा की एक स्तर पर तत्वों मुद्रित, कुछ इस तरह लिख सकते हैं:ट्रेसिंग स्ट्रीम
int[] nums = {3, -4, 8, 4, -2, 17, 9, -10, 14, 6, -12};
int sum = Arrays.stream(nums)
.filter(w -> {System.out.print(" " + w); return true;}) // trace
.map(n -> Math.abs(n))
.filter(w -> {System.out.print(" " + w); return true;}) // trace
.filter(n -> n % 2 == 0)
.distinct()
.sum();
System.out.println(sum);
बंद है, लेकिन है कि यह काफी के रूप में यह सुनिश्चित करने के लिए उचित सीमांकक नहीं है नहीं है, यह सुपाठ्य:
3 3 -4 4 8 8 4 4 -2 2 17 17 9 9 -10 10 14 14 6 6 -12 1256
क्या मैं चाहता हूँ है:
[3, -4, 8, 4, -2, 17, 9, -10, 14, 6, -12]
[3 4 8 4 2 17 9 10 14 6 12]
56
वहाँ यह करने के लिए एक अधिक मानक तरीका है? ध्यान दें कि लिंक किए गए आलेख के रूप में पीक कहते हैं कि ऐसा नहीं करता है, क्योंकि मैं किसी भी स्तर पर स्ट्रीम के सभी तत्वों को एक साथ इकट्ठा करना चाहता हूं।
आप 'peek' ऑपरेशन की तलाश में हैं, लिंक किए गए प्रश्न की जांच करें। – Tunaki
पीक नौकरी नहीं करेगा। मैंने अपने प्रश्न के लिए कुछ और विवरण जोड़ा है। यह एक डुप्लिकेट नहीं है! – pitosalas
आह हाँ। लेकिन यह नहीं है कि यह कैसे काम करता है: स्ट्रीम एक एकल पाइपलाइन है। प्रत्येक तत्व इसे तब तक शुरू करता है जब तक इसे खपत नहीं किया जाता है। और अगले के लिए दोहराना। आप जो चाहते हैं उसे प्राप्त करने के लिए, आपको एकाधिक पाइपलाइनों की आवश्यकता होगी। एक संग्रह कॉल पूरी धारा का उपभोग करता है और आप इसे फिर से संसाधित नहीं कर सकते हैं। – Tunaki