Java 8 API静态方法在非null输入上运行Function,或返回nullValue

XDR*_*XDR 2 java lambda java-8 method-reference

是否有任何Java 8 API静态方法Function在非null输入上运行,但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);
Run Code Online (Sandbox Code Playgroud)

Tun*_*aki 7

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

final Number x = getNumberThatCouldBeNull();
final long   y = Optional.ofNullable(x).map(Number::longValue).orElse(0L);
Run Code Online (Sandbox Code Playgroud)

如果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);
}
Run Code Online (Sandbox Code Playgroud)

  • 或者更好的是让getNumberThatCouldBeNull返回Optional,如果它在你的控件中 (3认同)
  • @XDR就像Alex提到的那样,`getNumberThatCouldBeNull`方法可能应该返回一个`Optional`来开始.这实际上是为什么选择主要是为什么引入:作为返回类型([在此处阅读](http://stackoverflow.com/q/23454952/1743880)).然后你真的不需要那个静态实用程序,你只需要调用`map`并返回一个带有`orElse`或`orElseGet`的默认值. (2认同)