三元如果包含函数结果
Ternary If that includes a functions result
我只是想知道是否有更有效的方法来按照 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 -> ...);
编辑:值 -1
也是某些部门的有效结果,与原始方法相比,它也适用于 Optional
:
Optional<Integer> result = getDivision(-5, 5);
我只是想知道是否有更有效的方法来按照 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 -> ...);
编辑:值 -1
也是某些部门的有效结果,与原始方法相比,它也适用于 Optional
:
Optional<Integer> result = getDivision(-5, 5);