2016-07-16 3 views
2

私は'o'文字が含まれている文字列リストの最初の項目を見つけるために、このコードスニペットを使用:StreamsでorElse(null)を使用する必要がありますか?

List<String> words = Arrays.asList("hi", "hello", "bye", "goodbye"); 
String s1 = words.stream().filter(word -> word.contains("o")).findFirst().orElse(null); 

だから、これは'o'を持っている最初の項目を検索します(こんにちは)とそれが何かを見つけるしない場合、それは意志nullorElse(null)で指定されたとおりに返します。だから私の質問は:

orElse(null)を使用することは本当に必要ですか?それが何も一致しない場合、デフォルトで何を返すのでしょうか?

+0

あなたは 'orElse'なしで試しましたか? – pzaenger

+0

私はそれを削除したので、オプションと文字列が互換性がないと告げる –

+0

ここで 'hello'は2番目に、' hi'の出力は? – emotionlessbananas

答えて

2

findFirstは、Optionalを返します。そこから実際の値を取得するには、orElseメソッドの1つを使用する必要があります。

+1

'オプション'、面白いものについて知りませんでした:) –

1

前述のように、findFirst()Optional<String>を返します。オプションは、ヌルチェックを回避する利点があり、デフォルト値をorElse("deafault")で定義する機会を与えます。 orElse(null)を書くことは絶対に非生産的です!

+0

私に警告してくれてありがとう'orElse(null)'は建設的ではありません。 –

関連する問題