检查多个变量的 not null 的更短方法

nop*_*ens 6 java

我有三个Integer变量,我不允许更改为原始变量,int我需要检查其中至少一个的值是否大于 0。是否有更短/更简洁的方法来重写下面的代码:

Integer foo = // null or some value
Integer bar = // null or some value
Integer baz = // null or some value

boolean atLeastOnePositive = (foo != null && foo > 0) || (bar != null && bar > 0) || (baz != null && baz > 0)

return atLeastOnePositive;
Run Code Online (Sandbox Code Playgroud)

lcz*_*ski 8

您可以使用Stream并这样做:

boolean atLeastOnePositive = Stream.of(foo, bar, baz)
  .anyMatch(value -> value != null && value > 0);

Run Code Online (Sandbox Code Playgroud)


mai*_*290 7

我想 varargs 方法将是最干净的方法:

public static boolean atLeastOnePositive(Integer...integers)
{
    for(Integer integer : integers)
    {
        if(integer != null && integer > 0) return true;
    }
    
    return false;
}
Run Code Online (Sandbox Code Playgroud)


Ama*_*dán 5

如果你希望引入一个新的方法与通用的解决问题,你的方式是完全没有问题,我没有看到很大的改进空间。

如果你确实想引入一种新方法,我建议结合 maio290 和 Iczapski 的解决方案。使用流时,过滤器增强了可读性:

public static boolean containsAtleastOnePositive(final Integer... values) {
    return Arrays.stream(values).filter(Objects::nonNull)
                                .anyMatch(v -> v > 0);
}
Run Code Online (Sandbox Code Playgroud)