2017-06-14 11 views
0
私が設定自分のコードから最大分を定義する必要が

Javaの空のストリーム

carWashBoxSet. 
       stream(). 
       filter(p -> p.getOrderTime() != null). 
       map(t -> t.getOrderTime()). 
       max(Date::compareTo). 
       get(). 
       getMinutes(); 

carWashBoxSet iはNULLポインタexeptionを取得し、空、それはどのstream.ifNonEpty().Orelse()のようななめらかを使用する場合、問題がありますか?

+1

carWashBoxSetがnullの場合、または空の場合はNPEを取得しますか? – Nathan

+0

前にnullをチェックしてみませんか?またはOptional.ofNullable(carWashBoxSet) – user7294900

+0

さて、古いDateクラスの使用を避けて、廃止予定の 'getMinutes'メソッドを避けるべきです。それは信頼できないので廃止されました。文脈からは明らかではありませんが、 'ZonedDateTime'、' Instant'や 'LocalTime'や' LocalDateTime'のほうが良いかもしれません。 –

答えて

3

また、.get().isPresent()なしで使用しないことを強くお勧めします。これは、オプションが空の場合はNoSuchElementExceptionを作成するためです。

これを回避するには、最後にgetMinutes()をマップし、代替として期待する内容に応じて.orElse()または.orElseGet()を追加します。

carWashBoxSet.stream() 
      .filter(p -> p.getOrderTime() != null) 
      .map(t -> t.getOrderTime()) 
      .max(Date::compareTo) 
      .map(boxSet -> boxSet.getMinutes()) 
      .orElse(/*another value*/); 

あなたは、代替を期待し、ちょうど何とかこの値を処理したくない場合は、さらに、使用せずに.ifPresent()も良い選択することができます。

carWashBoxSet.stream() 
      .filter(p -> p.getOrderTime() != null) 
      .map(t -> t.getOrderTime()) 
      .max(Date::compareTo) 
      .map(boxSet -> boxSet.getMinutes()) 
      .ifPresent(minutes -> System.out.println(minutes));