Java if语句的缩写


201

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

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

有谁知道如何将上述5行的缩写写成一行?



2
我认为您if弄错了逻辑。
NPE 2012年

7
if (city.getName()!=null){name = city.getName();}else{name="N/A"}
Steve Kuo 2012年

9
@SteveKuo您可以删除三个空格。;)
Peter Lawrey 2012年

2
if (city.getName()!= null) name = city.getName(); else name="N/A";
Anton Dozortsev

Answers:


423

使用三元运算符:

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

我认为您的条件倒退了-如果为空,则希望该值为“ N / A”。

如果城市为空怎么办?在这种情况下,您的代码*打了床。我还要添加另一张支票:

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

12
+1,尽管您有多余的括号。我会写: name = city.getName() == null ? "N/A" : city.getName();
Andres F.

20
有关样式和品味的问题:我想使布尔子句的分组清楚。
duffymo'1

4
无论如何-我使用DeMorgan定理,并得到了您所需要的。只要您正确表达了逻辑,就无需进行编辑。
duffymo'1

2
仅供参考,外部括号是不必要的。您可以做name = city.getName()==null ? "N/A" : city.getName()
史蒂夫·郭

4
不会String cityName = city.getName();抛出NullPointerExceptionif city == null吗?因此,我想说您的中间解决方案绝对是最好的(PS,我赞成“不必要的”括号!人们需要记住,99%的代码是在与其他人(以及您将来的自己)进行通信,而不是与编译器进行通信-否则我们将使用c!)
Alex

32

为了避免打.getName()两次电话,我会使用

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

2
在具有可变城市的多用户系统中,可能会有干扰city.setName(null)。您的答案可以很好地解决这个问题。
emory

27

做到这一点的方法是使用三元运算符:

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

但是,我相信您上面的代码中有错别字,您的意思是说:

if (city.getName() != null) ...

23

?: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)已测试。如果为true,则返回第一个值a。如果为假,则返回第二个值b。返回的值取决于条件测试a> b。条件可以是任何返回布尔值的表达式。


21

在Java 8中:

name = Optional.ofNullable(city.getName()).orElse("N/A")

18

我总是忘记如何使用?: 三元运算符。此补充答案是快速提醒。它是的简写if-then-else

myVariable = (testCondition) ? someValue : anotherValue;

哪里

  • () 持有 if
  • ? 手段 then
  • : 手段 else

与...相同

if (testCondition) {
    myVariable = someValue;
} else {
    myVariable = anotherValue;
}

10

您可以编写if, else if, else简短形式的语句。例如:

Boolean isCapital = city.isCapital(); //Object Boolean (not boolean)
String isCapitalName = isCapital == null ? "" : isCapital ? "Capital" : "City";      

这是以下形式的缩写:

Boolean isCapital = city.isCapital();
String isCapitalName;
if(isCapital == null) {
    isCapitalName = "";
} else if(isCapital) {
    isCapitalName = "Capital";
} else {
    isCapitalName = "City";
}

1
没有被要求,所以仍然为-1。
Makky 2015年

8

1.您可以删除括号换行符

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

2.您可以在Java中使用?:运算符。

句法:

Variable = Condition ? BlockTrue : BlockElse;

因此,在您的代码中您可以这样做:

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

3.布尔分配条件结果

boolean hasName = city.getName() != null;

额外: 出于好奇

在某些基于JAVAlike的语言中Groovy,您可以使用以下语法:

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

运算符?:分配从我们要求的变量返回的值。在这种情况下,city.getName()if 的值不是null


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

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

首先(city.getName() == null)检查条件。如果是,则将"N/A"其分配给name或简单地name="N/A"将其值city.getName()分配给name,即name=city.getName()

这里要注意的事情:

  1. 条件在圆括号中,后跟问号。这就是为什么我写(city.getName() == null)?。这里的问号在条件之后。甚至易于查看/阅读/猜测!
  2. (左结肠的值:)和结肠的值向右(a)中左结肠的值被分配时的条件为真,否则结肠的值权被分配给变量。

这是参考:http : //www.cafeaulait.org/course/week2/43.html


3

这是一行代码

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

这是它如何工作的示例,在js文件中的代码下运行并了解结果。这("Data" != null)是我们通常所做的条件,if()并且"Data"是当该条件变为真时的声明。这" : "是其他行为,"N/A"是对其他条件的陈述。希望这有助于您理解逻辑。

name = ("Data" != null) ? "Data" : "N/A";

console.log(name);


2

使用org.apache.commons.lang3.StringUtils:

name = StringUtils.defaultString(city.getName(), "N/A");

2

简单明了:

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

长版:

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

或我如何将其用于其他代码阅读器:

 String manType = "poor";
    if (hasMoney())
        manType = "rich";

0

您可以在Java中使用三元运算符。

句法:

Condition ? Block 1 : Block 2

因此,在您的代码中您可以这样做,

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

有关更多信息,您可以参考资源。


4
这是6岁的问题,已经接受了答案。您的答案没有提供任何新的信息-1
Makky

-3
name = city.getName()!=null?city.getName():"N/A"

4
不仅仅是发布一些代码,您还可以通过解释该技术来帮助OP。如何运作,为什么运作?
Zabuzard

1
在操作员周围放置空格可使其更易于阅读和维护。
geowar's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.