ChatGPT解决这个技术问题 Extra ChatGPT

Java if 语句的简写形式

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

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

有谁知道如何将上述 5 行的简短形式写成一行?

我假设您的 if 逻辑错误。
if (city.getName()!=null){name = city.getName();}else{name="N/A"}
@SteveKuo 您可以删除三个空格。 ;)
if (city.getName()!= null) name = city.getName(); else name="N/A";

d
duffymo

使用三元运算符:

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

我认为你有条件倒退 - 如果它为空,你希望该值为“N/A”。

如果城市为空怎么办?在这种情况下,您的代码 * 会遇到问题。我会添加另一张支票:

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

+1,尽管您有多余的括号。我会写:name = city.getName() == null ? "N/A" : city.getName();
风格和品味问题:我喜欢明确布尔子句的分组。
无论如何-我使用了德摩根定理并得到了您需要的东西。无需编辑,只要正确表达逻辑即可。
仅供参考,外括号是不必要的。你可以做name = city.getName()==null ? "N/A" : city.getName()
如果 city == nullString cityName = city.getName(); 不会抛出 NullPointerException?因此,我会说您的中间解决方案绝对是最好的(PS,我赞成“不必要的”括号!人们需要记住,99% 的编码是与其他人(以及您未来的自己)交流,而不是与编译器交流 - 否则我们会使用 c!)
P
Peter Lawrey

为了避免调用 .getName() 两次,我会使用

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

在具有可变城市的多用户系统中,可能存在中间的 city.setName(null)。你的回答巧妙地处理了这个问题。
S
Sam Goldberg

方法是使用三元运算符:

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

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

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

R
Reza Baradaran Gazorisangi

这 ? : 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 > b。条件可以是任何返回布尔值的表达式。


S
Suragch

我总是忘记如何使用 ?: ternary operator。这个补充答案是一个快速提醒。它是 if-then-else 的简写。

myVariable = (testCondition) ? someValue : anotherValue;

在哪里

() 持有如果

?那么意味着

其他意思

它与

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

d
digitebs

在 Java 8 中:

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

I
IgniteCoders

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;

额外:出于好奇

在某些基于 JAVA 的语言(例如 Groovy)中,您可以使用以下语法:

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

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


d
dreamer

您可以用简短的形式编写 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。
A
Alessio Koci
name = (city.getName() != null) ? city.getName() : "N/A";

W
Waqas Qayum

这是一行代码

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

这是它如何工作的示例,在 js 文件中运行下面的代码并理解结果。这个 ("Data" != null) 是我们在正常 if() 中所做的条件,而 "Data" 是这个条件成立时的语句。此 " : " 充当 else 并且 "N/A" 是 else 条件的语句。希望这可以帮助您理解逻辑。

名称=(“数据”!= null)? “数据”:“不适用”;控制台.log(名称);


P
Paul Rambags

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

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

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

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

这里要注意的事项:

条件在括号中,后跟问号。这就是我写 (city.getName() == null)? 的原因。这里的问号就在条件之后。甚至很容易看到/阅读/猜测!冒号左边的值 (:) 和冒号右边的值 (a) 当条件为真时,冒号左边的值被赋值,否则冒号右边的值被赋值给变量。

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


V
Vasile Doe

简单明了:

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

长版:

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

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

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

P
Peter Csala

您可以通过这种方式使其变得更容易:

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

您的答案可以通过额外的支持信息得到改进。请edit添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。您可以找到有关如何写出好答案的更多信息in the help center
V
Victor1125

在 Java 8+ 中,您有 2 个解决方案。使用简短的 if 语句:

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

在您的情况下,更好的解决方案是使用 Optional:

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

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

除了发布一些代码之外,您还可以通过解释该技术来帮助 OP。它是如何工作的,为什么它会工作?
在您的操作员周围放置空间使其更易于阅读和维护。