Java 8:检查两个或多个变量是否为空的优雅方法

Fer*_*ola 2 optional java-8

如何在 Java 8 中完成?

if (var1 != null && var2!=null) {
     callMethod(var1,var2);
}
Run Code Online (Sandbox Code Playgroud)

我在想这样的事情,但有两个变量:

Optional.ofNullable(var1).ifPresent(var1 -> callMethod(var1));
Run Code Online (Sandbox Code Playgroud)

Ber*_*eri 6

您的示例清晰易读,寻找替代方案毫无意义。正如您所提到的,Optional 只能包装一个值。

如果要替换多个 nonNull 检查,可以创建一个结构

Stream.of(var1, var2, var3, ...).allMatch(Objects::nonNull)
Run Code Online (Sandbox Code Playgroud)

这可以包装成一个辅助方法:

 boolean nonNull(Object arg){
   return arg!=null;
 }
 boolean nonNull(Object arg1, Object arg2){
   return arg1!=null && arg2 !=null;
 }
 ...
 boolean nonNull(Object... args){
   return Arrays.stream(args).allMatch(Objects::nonNull);
 }
Run Code Online (Sandbox Code Playgroud)

但是对于少于 3 个参数,这没有意义,而且性能更差。

保持代码可读性,而不是花哨。短是好的,短更好。