2014-04-16 11 views
23

मैं सीख रहा था कि जावा 8 धाराओं का उपयोग कैसे करें जब मैंने कुछ अजीब देखा।एक फ्लोट से स्ट्रीम कैसे प्राप्त करें []

Arrays.stream() सब कुछ लेकिन नाव सरणियों के लिए तरीके हैं:

:

  • Arrays.stream(int[]) : IntStream
  • Arrays.stream(long[]) : LongStream
  • Arrays.stream(double[]) : DoubleStream

इसी प्रकार, पूर्णांक के लिए स्ट्रीम कार्यान्वयन, डबल आदि नहीं बल्कि तैरता हैं

  • IntStream
  • LongStream
  • DoubleStream

उस के लिए एक कारण है?

फ्लोट स्ट्रीम के साथ काम करने का अनुशंसित तरीका क्या है?

+0

मैं इस धारणा के तहत था कि वे केवल सबसे आम आदिम प्रकारों का समर्थन करते हैं, लेकिन मुझे यकीन नहीं है। हो सकता है कि आप स्रोत कोड पर नज़र डालें और फ्लोटस्ट्रीम और एक स्ट्रीम (फ्लोट []) के साथ आएं: फ्लोटस्ट्रीम विधि?'जावा एसई 8 फॉर द रेली इंपैटेन्ट' से – Puce

+6

: "यदि आप शॉर्ट, चार, बाइट और बूलियन स्टोर करना चाहते हैं, तो इंटस्ट्रीम का उपयोग करें, और फ्लोट के लिए, डबलस्ट्रीम का उपयोग करें। लाइब्रेरी डिज़ाइनर को नहीं लगता था कि यह जोड़ने लायक था एक और पांच धारा प्रकार। " – marcinj

+0

@marcin_j आपकी टिप्पणी एक उत्तर के लायक है। इसे पोस्ट करें और मैं इसे स्वीकार करूंगा। –

उत्तर

17
Java SE 8 for the Really Impatient से

के S होर्स्टमैन द्वारा:

2,12। आदिम प्रकार स्ट्रीम

... यदि आप शॉर्ट, चार, बाइट और बूलियन स्टोर करना चाहते हैं, तो इंटस्ट्रीम का उपयोग करें, और फ्लोट के लिए, डबलस्ट्रीम का उपयोग करें। पुस्तकालय डिजाइनर नहीं सोचा था कि यह एक और पांच धारा प्रकार जोड़ने लायक था।

+0

tbh, मैं एक इंटस्ट्रीम का उपयोग करने के बजाय स्ट्रीम का उपयोग करना चाहता हूं और हर बार जब मैं इसके साथ कुछ भी करना चाहता हूं तो char को int डालना होगा। – Trejkaz

23

यहां एक बेहतर तरीका है, जिसमें डेटा की प्रतिलिपि शामिल नहीं है।

DoubleStream ds = IntStream.range(0, floatArray.length) 
          .mapToDouble(i -> floatArray[i]); 
+1

+1 बहुत बढ़िया दृष्टिकोण – everton

+0

बस क्या – stridecolossus

+3

के लिए मैं देख रहा था यह बहुत भ्रामक है कि यह एक IntStream :) – clankill3r

0

मैंने खुद से यह प्रश्न पूछा। इसका उत्तर देने के लिए, मैंने लाइब्रेरी पर काम करना शुरू किया जिसमें फ़्लोटटॉइन्टफंक्शन और बाइट टॉर्चफंक्शन और (बेशक) फ्लोटस्ट्रीम, चारस्ट्रीम, बाइटस्ट्रीम इत्यादि जैसी चीजें शामिल थीं। यह जल्दी से मेरे लिए सिरदर्द बन गया।

लाइब्रेरी डेवलपर्स के हिस्से में ऐसा करने के लिए बहुत काम किया गया था क्योंकि आपको सभी प्राचीन डेटा प्रकारों के बीच विधियों और इंटरफेस बनाना होगा। जैसे ही आप अधिक डेटा प्रकार लागू करते हैं, यह एक बड़ा और बड़ा गड़बड़ बन जाता है। कल्पना करें कि फ्लोट से अन्य सभी आदिम प्रकारों तक, अन्य सभी आदिम प्रकारों के लिए डबल, अन्य सभी आदिम प्रकारों के लिए दो,

इसके लिए दीर्घकालिक समाधान जावा जोड़ने के लिए है प्रकार ताकि आप बल्कि आवरण प्रकार (Stream<Integer> और Stream<Float>)

का उपयोग कर इस सुविधा है जो भविष्य में जावा में जोड़ा जा सकता पर अद्यतन के लिए परियोजना Vahalla पर एक नजर डालें से Stream<int> और Stream<float> जैसे काम कर सकें। http://openjdk.java.net/projects/valhalla/

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