Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ifPresent在Java8中检查空安全对象_Java_Lambda_Java 8_Functional Programming - Fatal编程技术网

使用ifPresent在Java8中检查空安全对象

使用ifPresent在Java8中检查空安全对象,java,lambda,java-8,functional-programming,Java,Lambda,Java 8,Functional Programming,我有这个功能: public static long toEpochMilli(OffsetDateTime dateTime) { return dateTime.toInstant().toEpochMilli(); } 我想使用的,但我必须先检查它是否为空 private Long buildBookingValidDate (TimeIntervalType validFor) { return Optional.ofNullable(validFor.get

我有这个功能:

public static long toEpochMilli(OffsetDateTime dateTime) {
    return dateTime.toInstant().toEpochMilli();
}
我想使用的,但我必须先检查它是否为空

private Long buildBookingValidDate (TimeIntervalType validFor) {

        return Optional.ofNullable(validFor.getStartTimeStamp())
                .ifPresent(DateUtils::toEpochMilli);

    }
但是我不知道如何返回值

当输入为null时,我建议使用.map并返回可选值,而不是null

例如

当输入是某个值时


下面是它在普通Java中的外观。只是为了比较

private Long buildBookingValidDate (TimeIntervalType validFor) {
    if(validFor.getStartTimeStamp() == null)
        return null;

    return DateUtils.toEpochMilli(validFor.getStartTimeStamp());
}
您误用了Optional-它不是为替换空检查而设计的

如果您仍然不想在您的案例中使用普通的、旧的Java,那么您可以创建一个助手方法,如

static <T, R> R applyIfNotNull(T obj, Function<T, R> function) {
    return obj != null ? function.apply(obj) : null;
}
由于您非常喜欢可选,所以可以在applyIfNotNull方法中使用它:


当输入值为null时,首先确定要从此方法返回什么。1。如果可能的话,不要使用NULL,并且在99.9999%的情况下使用NULL。2.不要误用可选类型。使用平淡的旧的,而不是考虑作为返回类型,一般的答案是不检查它;这似乎不是这种方法的责任。允许NPE在这里逃逸似乎是完全合理的,因为管理预订的人应该进行有效性检查。
private Long buildBookingValidDate (TimeIntervalType validFor) {
    if(validFor.getStartTimeStamp() == null)
        return null;

    return DateUtils.toEpochMilli(validFor.getStartTimeStamp());
}
static <T, R> R applyIfNotNull(T obj, Function<T, R> function) {
    return obj != null ? function.apply(obj) : null;
}
long time = applyIfNotNull(validFor.getStartTimeStamp(), FooBar::toEpochMilli);
static <T, R> Optional<R> applyIfNotNull(T obj, Function<T, R> function) {
    return obj != null ? Optional.of(function.apply(obj)) : Optional.empty();
}