2015-11-26 17 views
25

オプションのストリームを先頭に追加します。オプション<T>をストリーム<T>に変換する方法?

がどのように私はストリーム< T>にオプション< T>に変換します:Stream.concatだけなので、私はこの質問を持っているストリームをconcatinateことができますか?

例:あなたがこれを行うことができたJava 8で

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

参照を書くことができますので、静的インポートすることも

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

可能Streams.streamをhttp://stackoverflow.com/questions/22725537/using-java-8s-optional-with-streamflatmap –

+0

この質問は本当にこの答えですが、より複雑な例を示しています。私はこれが単純な場合に備えておく価値があると思う。 –

答えて

28

行方不明stream()メソッドが追加されますので、このコードの動作:

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

JDK-8050820を参照してください。 Java-9 Early Accessをダウンロードすると、hereがビルドされます。

63

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

私は、Java 9が現在の状態のいくつかのプロジェクトに対していくつかの非後方互換性のある変更を行っているので、これをアップウィートしました。 [lombok](https://github.com/rzwitserloot/lombok/issues/985)などの一部のプロジェクトは、変化の遅いコア企業の成果物の一部です。 –

3

あなたが行うことができます。Java-9で

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

私は 'isPresent'の大ファンではありません。それは私にとってレガシーメソッドのように感じられ、Java8の前の時代を思い出させます。しかし、代替ソリューションを提供してくれてありがとう。 – slartidan

2

私は、Java 9上にない場合は、簡単な例GuavaStreams.stream(optional)方法をお勧めすることができます:あなただけ

stream(Optional.of("Hello")) 
関連する問題