Java Lambda - 检查ArrayList to Stream是否为空

时间:2015-12-30 03:49:19

标签: lambda java-8 java-stream optional

我有以下lambda表达式,如果bonusScheduleDurationContainers不为空,则工作正常。如果它是空的,我会得到NoSuchElementException。我如何在lambda表达式中检查它?

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();

2 个答案:

答案 0 :(得分:18)

Stream.findFirst会返回一个Optional,由您自行决定是否有值而不是只调用get。

如果可选项为空,则可以使用orElse方法返回默认值。

答案 1 :(得分:1)

您应该添加bonusScheduleDurationContainers的类型。也是由于findFirst()。get函数。请参阅文档。它声明会有一个exception。您应该使用orElse