Краткая форма для Java if

201

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

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

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

Makky
источник
2
Я полагаю, вы ifнеправильно поняли свою логику.
NPE
7
if (city.getName()!=null){name = city.getName();}else{name="N/A"}
Стив Куо
9
@SteveKuo Есть три пробела, которые вы можете удалить. ;)
Питер Лори
2
if (city.getName()!= null) name = city.getName(); else name="N/A";
Антон Дозорцев

Ответы:

424

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

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

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

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

name = ((city == null) || (city.getName() == null) ? "N/A" : city.getName());
duffymo
источник
12
+1, хотя у вас есть лишние скобки. Я бы написал: name = city.getName() == null ? "N/A" : city.getName();
Андрес Ф.
20
Вопрос стиля и вкуса: я хотел бы прояснить группировку логического предложения.
duffymo
4
Что угодно - я использовал теорему Деморгана и получил то, что тебе нужно. Не нужно редактировать, если вы правильно выражаете логику.
duffymo
2
К вашему сведению внешние скобки не нужны. Вы можете просто сделатьname = city.getName()==null ? "N/A" : city.getName()
Стив Куо
4
Не String cityName = city.getName();бросите, NullPointerExceptionесли city == null? Поэтому я бы сказал, что ваше среднее решение определенно является лучшим (PS и я одобряю «ненужные» скобки! Люди должны помнить, что 99% кодирования связывается с другими людьми (и вашим будущим я), а не с компилятором - иначе мы будем использовать с!)
Алекс
33

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

name = city.getName();
if (name == null) name = "N/A";
Питер Лори
источник
2
В многопользовательской системе с изменчивым городом может быть вмешательство city.setName(null). Ваш ответ аккуратно с этим справится.
Эмори
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) проверяется. Если это правда, первое значение, а, возвращается. Если оно ложно, возвращается второе значение b. Какое бы значение не возвращалось, зависит от условного теста, a> b. Условием может быть любое выражение, которое возвращает логическое значение.

Реза Барадаран Газорисанги
источник
21

в Ява 8:

name = Optional.ofNullable(city.getName()).orElse("N/A")
digitebs
источник
18

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

myVariable = (testCondition) ? someValue : anotherValue;

где

  • () держит if
  • ? средства then
  • : средства else

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

if (testCondition) {
    myVariable = someValue;
} else {
    myVariable = anotherValue;
}
Suragch
источник
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";
}
OctopusSD
источник
1
Об этом еще не спросили -1.
Макки
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;

EXTRA: для любопытных

В некоторых языках, основанных на JAVAлайке Groovy, вы можете использовать этот синтаксис:

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

Оператор ?:присваивает значение, возвращаемое из переменной, которую мы запрашиваем. В этом случае значение, city.getName()если это не так null.

IgniteCoders
источник
5
name = (city.getName() != null) ? city.getName() : "N/A";
shift66
источник
3
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. значение слева от двоеточия ( :) и значение справа от двоеточия (а) значение слева от двоеточия присваивается, когда условие выполняется, иначе значение справа от двоеточия назначается переменной.

вот ссылка: 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);

Waqas Qayum
источник
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, объяснив методику. Как это работает, почему это работает?
Забузард
1
Размещение пробелов вокруг ваших операторов значительно облегчает чтение и обслуживание.
Geowar