Forma abreviada para Java if statement

201

Eu sei que há uma maneira de escrever uma ifinstrução Java em forma abreviada.

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

Alguém sabe como escrever o formulário curto para as 5 linhas acima em uma linha?

Makky
fonte
5
operador ternário do google em java :)
CoolBeans
2
Suponho que você entendeu sua iflógica de maneira errada.
NPE
7
if (city.getName()!=null){name = city.getName();}else{name="N/A"}
Steve Kuo
9
@SteveKuo Existem três espaços que você pode remover. ;)
Peter Lawrey
2
if (city.getName()!= null) name = city.getName(); else name="N/A";
Anton Dozortsev

Respostas:

424

Use o operador ternário:

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

Eu acho que você tem as condições ao contrário - se for nulo, você deseja que o valor seja "N / A".

E se a cidade for nula? Seu código * atinge a cama nesse caso. Eu adicionaria outra verificação:

name = ((city == null) || (city.getName() == null) ? "N/A" : city.getName());
duffymo
fonte
12
+1, embora você tenha parênteses redundantes. Eu teria escrito: name = city.getName() == null ? "N/A" : city.getName();
Andres F.
20
Uma questão de estilo e bom gosto: gosto de deixar claro o agrupamento da cláusula booleana.
duffymo
4
Seja como for - usei o teorema de DeMorgan e consegui o que você precisava. Não há necessidade de editar, desde que você expresse a lógica corretamente.
duffymo
2
Para sua informação, os parênteses externos são desnecessários. Você pode simplesmente fazername = city.getName()==null ? "N/A" : city.getName()
Steve Kuo
4
Não vai String cityName = city.getName();jogar um NullPointerExceptionse city == null? Portanto, eu diria que sua solução intermediária é definitivamente a melhor (PS e eu aprovo os parênteses 'desnecessários'!) As pessoas precisam lembrar que 99% da codificação está se comunicando com outras pessoas (e com o seu futuro), não com o compilador - caso contrário usaríamos c)!
Alex
33

Para evitar ligar .getName()duas vezes, eu usaria

name = city.getName();
if (name == null) name = "N/A";
Peter Lawrey
fonte
2
Em um sistema multiusuário com uma cidade mutável, pode haver uma intervenção city.setName(null). Sua resposta lida perfeitamente com isso.
Emory
27

A maneira de fazer isso é com o operador ternário:

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

No entanto, acredito que você tenha digitado um erro de digitação no código acima e queira dizer:

if (city.getName() != null) ...
Sam Goldberg
fonte
23

O ? : operador em Java

Em Java, você pode escrever:

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

Definir uma variável única para um dos dois estados com base em uma única condição é um uso tão comum de if-else que um atalho foi criado para ela, o operador condicional,?:. Usando o operador condicional, você pode reescrever o exemplo acima em uma única linha como esta:

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

(a> b)? a: b; é uma expressão que retorna um dos dois valores, a ou b. A condição (a> b) é testada. Se for verdade, o primeiro valor, a, é retornado. Se for falso, o segundo valor, b, será retornado. Qualquer valor retornado depende do teste condicional, a> b. A condição pode ser qualquer expressão que retorne um valor booleano.

Reza Baradaran Gazorisangi
fonte
21

em java 8:

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

Estou sempre esquecendo como usar o ?: operador ternário . Esta resposta suplementar é um lembrete rápido. É uma abreviação de if-then-else.

myVariable = (testCondition) ? someValue : anotherValue;

Onde

  • () segura o if
  • ? significa then
  • : significa else

É o mesmo que

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

Você pode escrever if, else if, elseinstruções em formato curto. Por exemplo:

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

Esta é uma forma curta de:

Boolean isCapital = city.isCapital();
String isCapitalName;
if(isCapital == null) {
    isCapitalName = "";
} else if(isCapital) {
    isCapitalName = "Capital";
} else {
    isCapitalName = "City";
}
OctopusSD
fonte
1
Isso ainda não foi solicitado -1.
Makky
8

1. Você pode remover colchetes e quebras de linha .

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

2. Você pode usar ?: Operadores em java.

Sintaxe:

Variable = Condition ? BlockTrue : BlockElse;

Portanto, no seu código, você pode fazer assim:

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

3. Atribuir resultado da condição para Boolean

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

EXTRA: para curiosos

Em alguns idiomas baseados em JAVAlike Groovy, você pode usar esta sintaxe:

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

O operador ?:atribui o valor retornado da variável que estamos solicitando. Nesse caso, o valor de city.getName()se não for null.

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

em primeiro lugar a condição (city.getName() == null)é verificada. Se sim, então "N/A"é atribuído ao nome ou simplesmente name="N/A"ou o valor de city.getName()é atribuído ao nome, ou seja,name=city.getName() .

Coisas para olhar aqui:

  1. a condição está entre parênteses seguida por um ponto de interrogação. É por isso que escrevo (city.getName() == null)?. Aqui o ponto de interrogação está logo após a condição. Fácil de ver / ler / adivinhar mesmo!
  2. valor à esquerda de dois pontos ( :) e à direita de dois pontos (a) o valor à esquerda de dois pontos é atribuído quando a condição for verdadeira, caso contrário, o valor à direita de dois pontos é atribuído à variável.

aqui está uma referência: http://www.cafeaulait.org/course/week2/43.html

Arafe Zawad Sajid
fonte
3

aqui está um código de linha

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

Aqui está um exemplo de como funciona, execute o código abaixo no arquivo js e entenda o resultado. Esta ("Data" != null)é uma condição como fazemos no normal if()e "Data"é uma declaração quando essa condição se tornou verdadeira. isso " : "age como outra coisa e "N/A"é uma declaração para outra condição. Espero que isso ajude você a entender a lógica.

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

console.log(name);

Waqas Qayum
fonte
2

Use org.apache.commons.lang3.StringUtils:

name = StringUtils.defaultString(city.getName(), "N/A");
Paul Rambags
fonte
2

Simples e claro:

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

versão longa:

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

ou como eu estou usando isso para ficar claro para outros leitores de código:

 String manType = "poor";
    if (hasMoney())
        manType = "rich";
Vasile Doe
fonte
0

Você pode usar o operador ternário em java.

Sintaxe:

Condition ? Block 1 : Block 2

Então, no seu código, você pode fazer assim,

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

Para mais informações, você pode consultar este recurso.

Shiva
fonte
4
Esta é uma pergunta de 6 anos e aceitou a resposta. Sua resposta não fornece nada de novo -1
Makky
-3
name = city.getName()!=null?city.getName():"N/A"
Sombra
fonte
4
Em vez de apenas postar algum código, você ajudaria mais o OP, explicando a técnica. Como funciona, por que funciona?
Zabuzard 8/08
1
A colocação de espaços ao redor de seus operadores facilita a leitura e a manutenção.
geowar