2015-11-26 7 views
25

मैं एक वैकल्पिक के साथ एक स्ट्रीम प्रीपेड करना चाहता हूं। Stream.concat के बाद से ही स्ट्रीम concatinate कर सकते हैं मैं इस सवाल है:एक वैकल्पिक <T> को स्ट्रीम <T> में परिवर्तित कैसे करें?

मैं एक वैकल्पिक < टी> एक स्ट्रीम < टी> में परिवर्तित करते हैं?

उदाहरण:

Optional<String> optional = Optional.of("Hello"); 
// or Optional<String> optional = Optional.empty(); 
Stream<String> texts = optional.stream(); // not working 
+1

देखें http://stackoverflow.com/questions/22725537/using-java-8s-optional-with-streamflatmap –

+0

वह प्रश्न वास्तव में इसका उत्तर देता है, लेकिन यह एक और जटिल उदाहरण प्रस्तुत करता है। मुझे लगता है कि यह सरल मामला रखने के लायक है। –

उत्तर

28

में जावा-9 लापता stream() विधि जोड़ा जाता है , इसलिए यह कोड काम करता है:

Stream<String> texts = optional.stream(); 

JDK-8050820 देखें। जावा -9 प्रारंभिक पहुंच here बनाता है डाउनलोड करें।

63

जावा 8 में आप यह कर सकते हैं:

Stream<String> texts = optional.map(Stream::of).orElseGet(Stream::empty); 
+1

मैंने इसे ऊपर उठाया क्योंकि जावा 9 में कुछ मौजूदा परियोजनाओं में कुछ परियोजनाओं के लिए कुछ गैर-पिछड़े संगत परिवर्तन हैं। कुछ परियोजनाएं, जैसे कि [लोम्बोक] (https://github.com/rzwitserloot/lombok/issues/985), कोर कॉर्पोरेट कलाकृतियों का हिस्सा हैं जो बदले जाने में धीमी हैं। –

3

आप कर सकते हैं:

Stream<String> texts = optional.isPresent() ? Stream.of(optional.get()) : Stream.empty(); 
+9

मैं 'isPresent' का बड़ा प्रशंसक नहीं हूं, यह मेरे लिए एक विरासत विधि जैसा लगता है और मुझे Java8 से पहले के समय की याद दिलाता है। लेकिन एक वैकल्पिक समाधान प्रदान करने के लिए धन्यवाद। – slartidan

2

मैं Guava के Streams.stream(optional) विधि की सिफारिश कर सकते अगर आप जावा 9. पर एक साधारण उदाहरण नहीं हैं:,

Streams.stream(Optional.of("Hello")) 

भी संभव स्थिर आयात Streams.stream ताकि आप बस लिख सकते हैं

stream(Optional.of("Hello")) 
संबंधित मुद्दे