2016-02-12 12 views
5

नहीं खा रहा है कभी-कभी स्ट्रीम स्ट्रीम करने के चरणों के बीच स्ट्रीम में प्रत्येक तत्व के साथ "कुछ" (उदा। प्रिंट) आसान होगा, उदाहरण के लिए डिबगिंग के लिए।जावा स्ट्रीम "forEach" लेकिन धारा

List<String> list = new ArrayList<>(); 
list.add("one"); 
list.add("two"); 
list.add("three"); 
list.add("four"); 

List<String> filteredList = 
     list.stream() 
     .filter(s -> s.startsWith("t")) 
     .forEach(System.out::println) 
     .collect(Collectors.toList()); 

यह कैसे प्राप्त किया जा सकता:

एक साधारण उदाहरण ऐसा दिखाई दे सकता, दुर्भाग्य से इस forEach के रूप में काम नहीं करता धारा खपत?

+0

[जावा 8 एकाधिक बयानों के साथ लैम्ब्डा स्ट्रीम foreach] की संभावित डुप्लिकेट (http://stackoverflow.com/questions/31130457/java-8-lambda-stream-foreach-with-multiple-statements) –

+1

@ DidierL यह डुप्लिकेट वास्तव में एक अच्छा उदाहरण नहीं है क्योंकि यह 'peek' ऑपरेशन के अंदर स्ट्रीम तत्व _mutates_ है। – Tunaki

+0

@ टुनकी मुझे लगता है कि एक जो म्यूटेट करता है वह भी फिट होगा जब किसी को वास्तव में उत्परिवर्तन की आवश्यकता नहीं होती है। जवाब वास्तव में वही है। मुझे लगता है कि इन सभी 'चोटी' से संबंधित प्रश्न लगभग हमेशा समान होते हैं। –

उत्तर

11

आप peek ऑपरेशन के लिए देख रहे हैं:

इस विधि में मुख्य रूप से डिबगिंग समर्थन करने के लिए है, जहां आप तत्वों को देखने के लिए के रूप में वे एक पाइप लाइन

इस में एक निश्चित बिंदु अतीत प्रवाह चाहते मौजूद है विधि स्ट्रीम पाइपलाइन के सभी तत्वों पर दी गई कार्रवाई को निष्पादित करने के बाद निष्पादित कार्रवाई निष्पादित करेगी। इस प्रकार, यह तत्वों के peek लेने की अनुमति देता है।

List<String> filteredList = 
    list.stream() 
     .filter(s -> s.startsWith("t")) 
     .peek(System.out::println) 
     .collect(Collectors.toList()); 
संबंधित मुद्दे