2015-12-30 61 views
3

我有以下lambda表達式,並且如果在bonusScheduleDurationContainers非空時正常工作。如果它是空的,我得到一個NoSuchElementException。我如何在lambda表達式中檢查這個?Java Lambda - 檢查一個ArrayList到Stream是否爲空

final List<ScheduleDurationContainer> bonusScheduleDurationContainers 
     = scheduleDurationContainersOfWeek.stream() 
              .filter(s -> s.getContainerType() == ScheduleIntervalContainerTypeEnum.BONUS) 
              .collect(Collectors.toList()); 

final ScheduleDurationContainer bonusScheduleDurationContainer 
     = bonusScheduleDurationContainers.stream() 
             .filter(s -> s.getDayOfWeekStartingWithZero() == dayOfWeekTmp) 
             .findFirst() 
             .get(); 

回答

14

Stream.findFirst返回一個Optional,它由您來檢查是否可選有一個值,而不是隻調用get。

如果可選項爲空,則可以使用orElse方法返回默認值。

1

您應該添加什麼類型的bonusScheduleDurationContainers。也是由於findFirst()。get函數。請參閱文檔。它表示將會有一個exception。您應該使用orElse