2015-11-26 19 views
25

İsteğe bağlı bir akış oluşturmak istiyorum.İsteğe bağlı bir <T> akışı bir Stream <T> içine nasıl dönüştürülür?

nasıl Akış < T> içine Opsiyonel < T> dönüştürebilirim: Stream.concat beri sadece bu soru var Akışlarına borular ile arka arkaya olabilir?

Örnek:

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

bakın http://stackoverflow.com/questions/22725537/using-java-8s-optional-with-streamflatmap –

+0

Bu soru gerçekten buna cevap veriyor, ancak daha karmaşık bir örnek sunuyor. Bence bu basit davayı sürdürmeye değer. –

cevap

28

Bu nedenle bu kod çalışır:

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

Bkz. JDK-8050820. Download Java-9 Erken Erişim, here'u oluşturur.

63

Java 8'de bunu yapabilirsiniz:

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

Bunu destekledim çünkü Java 9'un mevcut durumundaki bazı projeler için geriye dönük uyumlu olmayan bazı değişiklikler var. [Lombok] (https://github.com/rzwitserloot/lombok/issues/985) gibi bazı projeler, değişmesi yavaş olan temel kurumsal eserlerin bir parçasıdır. –

3

Sen yapabilirsiniz: Java 9 kayıp stream() yöntem eklenir yılında

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

Ben 'isPresent' büyük bir hayranı değilim, bana eski bir yöntem gibi geliyor ve bana Java8 öncesi kez hatırlatıyor. Ama alternatif bir çözüm sağladığınız için teşekkürler. – slartidan

2

Eğer Java 9. Basit bir örnek değilse ben Guava 'ın Streams.stream(optional) yöntemi tavsiye edebilir:

Ayrıca
Streams.stream(Optional.of("Hello")) 

olası statik ithalat Streams.stream için sadece yazma, böylece

stream(Optional.of("Hello")) 
İlgili konular