如果空流为空,则为NullPointerException

时间:2017-06-14 12:59:16

标签: java java-stream optional

我需要从设置我的代码

定义最大分钟数
 carWashBoxSet.
                stream().
                filter(p -> p.getOrderTime() != null).
                map(t -> t.getOrderTime()).
                max(Date::compareTo).
                get().
                getMinutes();

问题是如果carWashBoxSet为空我得到空指针exeption,是否可以像stream.ifNonEpty().Orelse()那样使用smth?

1 个答案:

答案 0 :(得分:3)

我强烈建议不使用.get()而不使用.isPresent(),因为当optional为空时,您将创建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));