2016-04-07 25 views
0

何も見つからない場合、次のストリームパイプラインは機能しません。その場合、.findFirst()はNPEをスローします。java 8ストリーム - 何も見つからない場合は処理します

どうすればこの問題を防ぐことができますか?

scheduleDurationContainers.stream() 
     .filter(s -> s.getContainerType() == ScheduleIntervalContainerTypeEnum.BONUS).findFirst().get() 
+1

あなたが何も見つからない場合は何をしたいかどう?デフォルト値がありますか?例外を投げる? – Tunaki

答えて

1

あなたはfindFirstによって返されたオプションが空の場合、いくつかのデフォルト値を返すことになる、orElse(someDefault)get()を置き換えることができます。 findFirstが何も見つからない場合に特定の例外をスローする場合は、orElseThrow(execptionSupplier)を使用できます。次の順序で

0

デフォルト値を返したい場合はラムダ式を使用して返すように何もないならば、あなたはfindAnyを(使用する必要があります)とorElse()

Person result1 = persons.stream()       // Convert to stream 
       .filter(x -> "answer".equals(x.getName())) // we want to filter "answer" only 
       .findAny()        // If 'findAny' then return found 
       .orElse(null);       // If not found, return null 
関連する問題