【问题标题】:Ternary If that includes a functions result三元如果包含函数结果
【发布时间】:2021-07-09 07:17:09
【问题描述】:

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

【问题讨论】:

  • 不,没有办法在单个表达式中做到这一点,除了创建一个您调用的方法,例如:myMethodUsingConditionalExpression(getDivision(2, 0))
  • 只写int result = getDivision(2, 0); System.out.println(result == -1 ? "No" : result);。这里没有效率问题,所以可读性最重要。
  • for (int result = getDivision(2, 0), iterations = 0; iterations < 1; System.out.println(result == -1 ? "No" : result, iterations++);(不认真)。
  • 该死,这很糟糕,但非常感谢,我想我会坚持使用当前的
  • 在您的三元表达式中,您返回的是字符串或整数。这行不通。

标签: java conditional-operator


【解决方案1】:

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

【讨论】:

  • 当然,这比返回 -1 更好,否则它是除法的有效结果。您也可以使用OptionalInt
  • 实际上要好得多,因为-1 可以是除法的有效结果(请参阅编辑后的答案):)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-11
相关资源
最近更新 更多