Java 如果空流为空,则为NullPointerException

Java 如果空流为空,则为NullPointerException,java,java-stream,optional,Java,Java Stream,Optional,我需要从设置代码中定义最大分钟数 carWashBoxSet. stream(). filter(p -> p.getOrderTime() != null). map(t -> t.getOrderTime()). max(Date::compareTo). get(). getMinute

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

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

问题是,如果carWashBoxSet为空,我将获得空指针验证,是否可以使用smth,如
stream.ifNonEpty().Orelse()

我强烈建议不要使用
.get()
而不使用
.isPresent()
,因为当可选项为空时,您将创建一个NoTouchElementException

为了绕过这个问题,我将在末尾映射
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));

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

为了绕过这个问题,我将在末尾映射
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));

可以肯定的是:如果carWashBoxSet为null或为空,您会得到一个NPE?为什么不先检查null呢?或者可选。如果不使用(carWashBoxSet),则应避免使用过时的
Date
类,并且应明确避免使用其不推荐的
getMinutes
方法。不推荐使用,因为它不可靠。从上下文看不清楚,但可能
ZonedDateTime
Instant
甚至
LocalTime
LocalDateTime
都是更好的选择。可以肯定的是:如果carWashBoxSet为null或为空,您会得到NPE?为什么不先检查null?或者可选。如果不使用(carWashBoxSet),则应避免使用过时的
Date
类,并且应明确避免使用其不推荐的
getMinutes
方法。不推荐使用,因为它不可靠。从上下文来看还不清楚,但可能
ZonedDateTime
Instant
甚至
LocalTime
LocalDateTime
可能是更好的选择。