如果找不到任何内容,则以下流管道不起作用,在这种情况下.findFirst()
会抛出NPE。
我该如何防止这种情况?
scheduleDurationContainers.stream()
.filter(s -> s.getContainerType() == ScheduleIntervalContainerTypeEnum.BONUS).findFirst().get()
答案 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