java - 如果空流为空,则出现 NullPointerException

标签 java java-stream option-type

我需要定义设置代码的最大分钟数

 carWashBoxSet.
                stream().
                filter(p -> p.getOrderTime() != null).
                map(t -> t.getOrderTime()).
                max(Date::compareTo).
                get().
                getMinutes();

问题是,如果 carWashBoxSet 为空,我会得到空指针异常,是否可以使用像 stream.ifNonEpty().Orelse() 这样的东西?

最佳答案

我强烈建议不要在没有.isPresent()的情况下使用.get(),因为当可选值为空时,您将创建一个NoSuchElementException。

要绕过这个问题,我将在末尾映射 getMinutes() ,并添加 .orElse().orElseGet()取决于您期望的替代方案。

carWashBoxSet.stream()
            .filter(p -> p.getOrderTime() != null)
            .map(t -> t.getOrderTime())
            .max(Date::compareTo)
            .map(boxSet -> boxSet.getMinutes())
            .orElse(/*another value*/);

如果您不期望有替代方案,只想以某种方式处理该值,而不进一步使用 .ifPresent() 也可能是一个不错的选择。

carWashBoxSet.stream()
            .filter(p -> p.getOrderTime() != null)
            .map(t -> t.getOrderTime())
            .max(Date::compareTo)
            .map(boxSet -> boxSet.getMinutes())
            .ifPresent( minutes -> System.out.println(minutes));

关于java - 如果空流为空,则出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44545539/

相关文章:

c++ - 传递 std::ref(value) 时是否应应用 std::optional 的推导指南?

java - 使用 Optional.of() 有真正的理由吗?

java - URLEncoder 仅对某些 UTF-8 字符进行编码,而不是全部在字符串中

java - 如何屏蔽用户列表?

java - switch 中的所有情况都会执行,而只有一种情况应该被执行

java 8 过滤一个 ListOfMap 用于检查一个键是否存在,如果存在则收集一个映射

java - Map<String, Set<T>> 到 Java 8 中的列表

java - 如何在golang中强制使用UTF-8编码

java - 在 Java 8 中是否有一种简洁的方法来迭代带有索引的流?

c++ - constexpr 上下文中的 std::optional 赋值运算符