Java 8 API 非空输入 运行 函数的静态方法,或 return nullValue

Java 8 API static method to run Function on non-null input, or return nullValue

是否有任何 Java 8 API 静态方法在非 null 输入上运行 Function,但 returns nullValuenull 输入上?

我自己可以轻松编写此方法,但如果有标准方法,我宁愿使用它。

public static <T, R> R transform(final T t, final Function<T, R> rFromT, final R nullValue) {
    return
        t == null
            ? nullValue
            : rFromT.apply(t)
    ;
}

// which can be called like:
final Number x = getNumberThatCouldBeNull();
final long   y = transform(x, Number::longValue, 0L);

您可以只使用 Java 中的新 Optional API 8:

final Number x = getNumberThatCouldBeNull();
final long   y = Optional.ofNullable(x).map(Number::longValue).orElse(0L);

如果x不为null,则映射到它的long值,返回;否则将返回 0

当然,如果你想将它隐藏在一个方法中,你可以使用以下方法:

public static <T, R> R transform(final T t, final Function<T, R> mapper, final R nullValue) {
    return Optional.ofNullable(t).map(mapper).orElse(nullValue);
}

Java 8 API.

好像没有这个方法

如果有人找到被遗漏的,请告诉大家。

有关 Optional.

的用法,请参阅@Tunaki 的回答以及其他所有人的评论

但是,在我的用例中,提供可以是 nullObject 的方法是第三方的,因此使用 Optional 不会给我带来任何好处情况下,性能较差。

您也可以采用不同的方法。您可以创建一个 higher-order function 将您的函数和提供的默认值作为参数,并 return 一个新函数,而不是将空值检查和函数调用封装在一个方法中:

public static <T, R> Function<T, R> transform(
        Function<T, R> mapper,
        R defaultValue) {

    return t -> Optional.ofNullable(t)
            .map(mapper)
            .orElse(defaultValue);
}

这个新函数在应用时将执行空值检查,并且 return 提供的默认值或由原始函数 return 编辑的值。

示例:

Function<Number, Long> transformed = transform(Number::longValue, 0L);

Number x = getNumberThatCouldBeNull();

long longNumber = transformed.apply(x);

这种方法的优点是空检查是延迟执行的。