我有三个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)
您可以使用Stream并这样做:
boolean atLeastOnePositive = Stream.of(foo, bar, baz)
.anyMatch(value -> value != null && value > 0);
Run Code Online (Sandbox Code Playgroud)
我想 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)
如果你不希望引入一个新的方法与通用的解决问题,你的方式是完全没有问题,我没有看到很大的改进空间。
如果你确实想引入一种新方法,我建议结合 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)