2017-06-14 50 views
0

我需要定義從設置我的代碼最大分鐘Java的空流

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

的問題是,如果carWashBoxSet空我得到空指針exeption,是任何使用不便像stream.ifNonEpty().Orelse()

+1

可以肯定的是:如果carWashBoxSet爲空或者它是空的,你會得到一個NPE? – Nathan

+0

爲什麼不檢查null之前?或者Optional.ofNullable(carWashBoxSet) – user7294900

+0

另外,你應該避免使用過時的Date類,你應該避免使用它的getMinutes方法。它被棄用,因爲它不可靠。從上下文不清楚,但也許'ZonedDateTime','即時',甚至'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));