java 8 stream - 如果找不到任何内容,则处理

时间:2016-04-07 08:26:26

标签: lambda java-8 java-stream

如果找不到任何内容,则以下流管道不起作用,在这种情况下.findFirst()会抛出NPE。

我该如何防止这种情况?

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

2 个答案:

答案 0 :(得分:4)

您可以将get()替换为orElse(someDefault),如果findFirst返回的Optional为空,则会返回一些默认值。或者,如果您想在orElseThrow(execptionSupplier)找不到任何内容时抛出某些特定异常,则可以使用findFirst

答案 1 :(得分:3)

如果要使用lambda表达式返回任何内容,则要返回默认值,则应按以下顺序使用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