java 8流-如果没有找到就处理

qum*_*uma 5 lambda java-8 java-stream

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

我怎样才能防止这种情况?

scheduleDurationContainers.stream()
        .filter(s -> s.getContainerType() == ScheduleIntervalContainerTypeEnum.BONUS).findFirst().get()
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 6

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


Ama*_*gar 5

如果您想在使用 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
Run Code Online (Sandbox Code Playgroud)