我知道有一种方法可以用简短的形式编写Java if语句。

if (city.getName() != null) {
    name = city.getName();
} else {
    name="N/A";
}

有谁知道如何把以上5行的简写成一行吗?


当前回答

的吗?: Java中的操作符

在Java中,你可以这样写:

if (a > b) {
  max = a;
}
else {
  max = b;
}

根据单一条件将单个变量设置为两种状态之一是if-else的常见用法,因此为它设计了一种快捷方式,即条件操作符?:。使用条件操作符,你可以在一行中重写上面的例子,像这样:

max = (a > b) ? a : b;

(a > b) ?A: b;是返回两个值之一(a或b)的表达式。条件(a > b)被测试。如果为真,则返回第一个值a。如果为false,则返回第二个值b。无论返回哪个值都依赖于条件测试> b。条件可以是返回布尔值的任何表达式。

其他回答

使用三元运算符:

name = ((city.getName() == null) ? "N/A" : city.getName());

我认为你有反向的条件-如果它是空的,你想要的值是“N/A”。

如果城市为空呢?在这种情况下,你的代码就会完蛋。我还要再检查一下:

name = ((city == null) || (city.getName() == null) ? "N/A" : city.getName());

在Java 8+中,你有两个解决方案。 带有简短的if语句:

Objects.nonNull(city.getName())? city.getName(): "N/A";

在你的情况下,更好的解决方案是使用可选:

Optional.ofNullable(city)
            .map(City::getName)
            .orElse("N/A");

的吗?: Java中的操作符

在Java中,你可以这样写:

if (a > b) {
  max = a;
}
else {
  max = b;
}

根据单一条件将单个变量设置为两种状态之一是if-else的常见用法,因此为它设计了一种快捷方式,即条件操作符?:。使用条件操作符,你可以在一行中重写上面的例子,像这样:

max = (a > b) ? a : b;

(a > b) ?A: b;是返回两个值之一(a或b)的表达式。条件(a > b)被测试。如果为真,则返回第一个值a。如果为false,则返回第二个值b。无论返回哪个值都依赖于条件测试> b。条件可以是返回布尔值的任何表达式。

简单明了:

String manType = hasMoney() ? "rich" : "poor";

长版:

      String manType;
    if (hasMoney()) {
        manType = "rich";
    } else {
        manType = "poor";
    }

或者我如何使用它来让其他代码读者更清楚:

 String manType = "poor";
    if (hasMoney())
        manType = "rich";
name = (city.getName() != null) ? city.getName() : "N/A";