2015-10-07 5 views
7

मैं निम्नलिखित कोड है:कैसे सूची में DoubleStream इकट्ठा करने के लिए

Stream.of("1,2,3,4".split(",")).mapToDouble(Double::valueOf).collect(Collectors.toList()); 

मैं List<Double> वापस जाने के लिए चाहते हैं।

यह कोड संकलित नहीं करता है।

Error:(57, 69) java: method collect in interface java.util.stream.DoubleStream cannot be applied to given types; 
    required: java.util.function.Supplier<R>,java.util.function.ObjDoubleConsumer<R>,java.util.function.BiConsumer<R,R> 
    found: java.util.stream.Collector<java.lang.Object,capture#1 of ?,java.util.List<java.lang.Object>> 
    reason: cannot infer type-variable(s) R 
    (actual and formal argument lists differ in length) 

कैसे इस समस्या को हल करने के लिए:

मैं त्रुटि देखते हैं?

+2

क्यों आप 'एक सूची में सीधे बाद का उपयोग mapToDouble' आप इसे एकत्र करना चाहते है? बस 'मानचित्र' का प्रयोग करें। आप 'स्ट्रिंग -> डबल -> डबल -> डबल' रूपांतरण करना चाहते हैं जबकि 'स्ट्रिंग -> डबल' पर्याप्त है। –

+1

अजीब क्या है? यदि आप इसे 'सूची' में एकत्र करना चाहते हैं, तो आप 'स्ट्रिंग -> डबल' फ़ंक्शन प्रदान कर रहे हैं, इसे 'डबल' होना चाहिए। –

+0

एलेक्सिस सी डबलस्ट्रीम आदिम धारा करता है? – gstackoverflow

उत्तर

14

आप boxed() का उपयोग कर सकते हैं। यह DoubleStream (आदिम युगल का प्रवाह, mapToDouble द्वारा लौटाए गए) को Stream<Double> पर मानचित्र करता है।

Stream.of("1,2,3,4".split(",")).mapToDouble(Double::parseDouble).boxed().collect(Collectors.toList()); 

ध्यान दें कि मैं Double::parseDouble को Double::valueOf बदल दिया है: इस DoubleDouble.valueOf द्वारा दिया आदिम double को अनबॉक्स्ड होने के लिए रोकता है।

लेकिन आप mapToDouble से शुरू करने के लिए क्यों उपयोग कर रहे हैं? तुम बस map इस तरह इस्तेमाल कर सकते हैं:

Stream.of("1,2,3,4".split(",")).map(Double::valueOf).collect(Collectors.toList()); 
+4

... और संभावित रूप से बड़ी धाराओं के लिए, मैं 'Pattern.compile (", ") की अनुशंसा करता हूं। splitAsStream ("1,2,3,4, ...") 'क्योंकि स्ट्रीम बनाने के लिए इसे किसी सरणी को पॉप्युलेट करने की आवश्यकता नहीं है। – Holger

+2

@ होल्गर, दूसरी ओर '.plit (",")' एक तेज़ पथ है जो regexp ऑब्जेक्ट और 'Matcher' बिल्कुल नहीं बनाता है। यह बहुत स्पष्ट नहीं है कि 'splitAsStream'' टोकन संख्या 'String.split' से बेहतर प्रदर्शन करेगा ... –

+1

@Tagir Valeev: यह हमेशा ऐसा होता है कि आपको "बड़ी संख्या" दहलीज बिल्कुल नहीं पता है। लेकिन यह स्पष्ट है कि जेनरेटेड सबस्ट्रिंग की बढ़ती संख्या के साथ आप एक पैटर्न/मैचर ऑब्जेक्ट के ओवरहेड को अनदेखा कर सकते हैं। – Holger

संबंधित मुद्दे