三元如果包含函数结果



我只是想知道在Java中是否有更有效的方法来做类似的事情。

只是用这个伪函数作为的例子

static int getDivision(int number, int divider) {
if(divider == 0) { return -1; }
return (number / divider);
}

如果我有一个三元运算符,它正在检查该函数的结果,如下面的

public static void main(String[] args) {
int result;
result = getDivision(2, 0);
System.out.println (
result == -1 ? "No" : result
);
}

我必须创建一个变量来存储结果,否则我可以像这个一样做

System.out.println (
getDivision(2, 0) == -1 ? "No" : getDivision(2, 0)
);

但我不得不调用函数两次,这更糟糕。是否可以使用三元运算符,但在条件中包含函数的结果?

System.out.println (
getDivision(2, 0) == -1 ? "No" : /*returned result*/
);

使用Optional,您可以表示真实的结果,也可以指示不存在任何结果:

static Optional<Integer> getDivision(int number, int divider) {
return divider == 0 ? Optional.empty() : Optional.of(number / divider);
}

用法:

Optional<Integer> result = getDivision(2, 0);
System.out.println(result.map(String::valueOf).orElse("No"));

或者,如果你只想在结果出现时进一步处理:

result.ifPresent( value -> ...);

EDIT:值-1也是某些除法的有效结果,与原始方法相比,Optional也能很好地工作

Optional<Integer> result = getDivision(-5, 5);

最新更新