三元如果包含函数结果

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);