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 nullValue
在 null
输入上?
我自己可以轻松编写此方法,但如果有标准方法,我宁愿使用它。
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 的回答以及其他所有人的评论
但是,在我的用例中,提供可以是 null
的 Object
的方法是第三方的,因此使用 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);
这种方法的优点是空检查是延迟执行的。
是否有任何 Java 8 API 静态方法在非 null
输入上运行 Function
,但 returns nullValue
在 null
输入上?
我自己可以轻松编写此方法,但如果有标准方法,我宁愿使用它。
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
.
但是,在我的用例中,提供可以是 null
的 Object
的方法是第三方的,因此使用 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);
这种方法的优点是空检查是延迟执行的。