Краткая форма для заявления if Java - PullRequest
165 голосов
/ 17 января 2012

Я знаю, что есть способ записать оператор Java if в краткой форме.

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

Кто-нибудь знает, как записать краткую форму для вышеуказанных 5 строк в одну строку?

Ответы [ 15 ]

350 голосов
/ 17 января 2012

Используйте троичный оператор:

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

Я думаю, что у вас есть условия задом наперед - если оно нулевое, вы хотите, чтобы значение было "N / A".

Что если город нулевой? Ваш код * попадает в кровать в этом случае. Я бы добавил еще одну проверку:

name = ((city == null) || (city.getName() == null) ? "N/A" : city.getName());
25 голосов
/ 17 января 2012

Чтобы не звонить .getName() дважды, я бы использовал

name = city.getName();
if (name == null) name = "N/A";
24 голосов
/ 17 января 2012

Способ сделать это с троичным оператором:

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

Однако я полагаю, что в приведенном выше коде есть опечатка, и вы хотите сказать:

if (city.getName() != null) ...
18 голосов
/ 16 ноября 2015

?: operator в Java

В Java вы могли бы написать:

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

Установка одной переменной в одно из двух состояний на основе одного условия является таким распространенным применением if-иначе для него был разработан ярлык, условный оператор,?:.Используя условный оператор, вы можете переписать приведенный выше пример в одну строку следующим образом:

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

(a> b)?а: б;является выражением, которое возвращает одно из двух значений, a или b.Условие (a> b) проверяется.Если это правда, первое значение, а, возвращается.Если оно ложно, возвращается второе значение b.Какое бы значение не возвращалось, зависит от условного теста, a> b.Условием может быть любое выражение, которое возвращает логическое значение.

17 голосов
/ 29 июня 2017

в Java 8:

name = Optional.ofNullable(city.getName()).orElse("N/A")
15 голосов
/ 23 июня 2017

Я всегда забываю, как использовать троичный оператор ?: . Этот дополнительный ответ является быстрым напоминанием. Это сокращение для if-then-else.

myVariable = (testCondition) ? someValue : anotherValue;

, где

  • () содержит if
  • ? означает then
  • : означает else

Это так же, как

if (testCondition) {
    myVariable = someValue;
} else {
    myVariable = anotherValue;
}
8 голосов
/ 22 июля 2015

Вы можете написать 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";
}
6 голосов
/ 17 января 2012
name = (city.getName() != null) ? city.getName() : "N/A";
3 голосов
/ 24 июля 2018

вот код одной строки

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

вот пример того, как это работает, запустите приведенный ниже код в файле js и поймите результат.Это ("Data" != null) является условием, как мы делаем в нормальном if(), а "Data" является утверждением, когда это условие стало истинным.это " : " действует как иначе, а "N/A" является оператором для условия else.Надеюсь, что это поможет вам понять логику.

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

console.log(name);
3 голосов
/ 05 ноября 2016
name = ( (city.getName() == null)? "N/A" : city.getName() );

сначала проверяется условие (city.getName() == null). Если да, тогда "N/A" присваивается имени или просто name="N/A", или же значение из city.getName() присваивается имени, то есть name=city.getName().

На что посмотреть:

  1. условие в скобках, за которым следует знак вопроса. Вот почему я пишу (city.getName() == null)?. Здесь знак вопроса находится сразу после условия. Легко увидеть / прочитать / угадать даже!
  2. значение слева от двоеточия (:) и значение справа от двоеточия (a) значение слева от двоеточия присваивается, когда условие истинно, иначе значение справа от двоеточия назначается переменной.

вот ссылка: http://www.cafeaulait.org/course/week2/43.html

...