我只是想知道在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);