Forma abreviada para Java si la declaración

201

Sé que hay una manera de escribir una ifdeclaración Java en forma corta.

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

¿Alguien sabe cómo escribir la forma corta de las 5 líneas anteriores en una sola línea?

Makky
fuente
55
operador ternario de google en java :)
CoolBeans
2
Supongo que tienes tu iflógica al revés.
NPE
77
if (city.getName()!=null){name = city.getName();}else{name="N/A"}
Steve Kuo
9
@SteveKuo Hay tres espacios que puedes eliminar. ;)
Peter Lawrey
2
if (city.getName()!= null) name = city.getName(); else name="N/A";
Anton Dozortsev

Respuestas:

424

Use el operador ternario:

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

Creo que tiene las condiciones al revés: si es nulo, desea que el valor sea "N / A".

¿Qué pasa si la ciudad es nula? Su código * golpea la cama en ese caso. Añadiría otro cheque:

name = ((city == null) || (city.getName() == null) ? "N/A" : city.getName());
duffymo
fuente
12
+1, aunque tiene paréntesis redundantes. Habría escrito: name = city.getName() == null ? "N/A" : city.getName();
Andres F.
20
Una cuestión de estilo y gusto: me gusta aclarar la agrupación de la cláusula booleana.
duffymo
44
Lo que sea: utilicé el teorema de DeMorgan y obtuve lo que necesitabas. No es necesario editar, siempre que exprese la lógica correctamente.
duffymo
2
FYI los paréntesis externos son innecesarios. Puedes hacerloname = city.getName()==null ? "N/A" : city.getName()
Steve Kuo, el
44
No String cityName = city.getName();lanzará un NullPointerExceptionsi city == null? Por lo tanto, diría que su solución intermedia es definitivamente la mejor (¡PS y yo apruebo los paréntesis 'innecesarios'!) La gente necesita recordar que el 99% de la codificación se está comunicando con otras personas (y su futuro yo), no con el compilador; de lo contrario usaríamos c!)
Alex
33

Para evitar llamar .getName()dos veces, usaría

name = city.getName();
if (name == null) name = "N/A";
Peter Lawrey
fuente
2
En un sistema multiusuario con una ciudad mutable, podría haber una intervención city.setName(null). Su respuesta maneja perfectamente eso.
emory
27

La forma de hacerlo es con el operador ternario:

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

Sin embargo, creo que tiene un error tipográfico en su código anterior, y quiere decir:

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

Los ? : operador en Java

En Java podrías escribir:

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

Establecer una sola variable en uno de los dos estados en función de una sola condición es un uso tan común de if-else que se ha diseñado un acceso directo para él, el operador condicional,?:. Usando el operador condicional puede reescribir el ejemplo anterior en una sola línea como esta:

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

(a> b)? a: b; es una expresión que devuelve uno de los dos valores, a o b. La condición, (a> b), se prueba. Si es verdadero, se devuelve el primer valor, a. Si es falso, se devuelve el segundo valor, b. El valor devuelto depende de la prueba condicional, a> b. La condición puede ser cualquier expresión que devuelva un valor booleano.

Reza Baradaran Gazorisangi
fuente
21

en java 8:

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

Siempre estoy olvidando cómo usar el ?: operador ternario . Esta respuesta complementaria es un recordatorio rápido. Es la abreviatura de if-then-else.

myVariable = (testCondition) ? someValue : anotherValue;

dónde

  • () sostiene el if
  • ? medio then
  • : medio else

Es lo mismo que

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

Puede escribir if, else if, elsedeclaraciones en forma corta. Por ejemplo:

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

Esta es una forma corta de:

Boolean isCapital = city.isCapital();
String isCapitalName;
if(isCapital == null) {
    isCapitalName = "";
} else if(isCapital) {
    isCapitalName = "Capital";
} else {
    isCapitalName = "City";
}
OctopusSD
fuente
1
Esto no fue preguntado así que aún -1.
Makky
8

1. Puede eliminar corchetes y saltos de línea .

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

2. Puede usar ?: Operadores en java.

Sintaxis:

Variable = Condition ? BlockTrue : BlockElse;

Entonces, en su código, puede hacer así:

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

3. Asignar resultado de condición para booleano

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

EXTRA: para curiosos

En algunos idiomas basados ​​en JAVAlike Groovy, puede usar esta sintaxis:

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

El operador ?:asigna el valor devuelto por la variable que estamos solicitando. En este caso, el valor de city.getName()si no lo es null.

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

en primer lugar (city.getName() == null)se verifica la condición . En caso afirmativo, se "N/A"le asigna el nombre o simplemente name="N/A"o de lo contrario el valor de city.getName()se asigna al nombre, es decir name=city.getName().

Cosas para mirar aquí:

  1. La condición está entre paréntesis seguida de un signo de interrogación. Por eso escribo (city.getName() == null)?. Aquí el signo de interrogación está justo después de la condición. ¡Fácil de ver / leer / adivinar incluso!
  2. el valor a la izquierda de los dos puntos ( :) y el valor a la derecha de los dos puntos (a) el valor a la izquierda de los dos puntos se asigna cuando la condición es verdadera; de lo contrario, el valor a la derecha de los dos puntos se asigna a la variable.

Aquí hay una referencia: http://www.cafeaulait.org/course/week2/43.html

Arafe Zawad Sajid
fuente
3

aquí hay un código de línea

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

Aquí hay un ejemplo de cómo funciona, ejecute el siguiente código en el archivo js y comprenda el resultado. Esta ("Data" != null)es una condición como lo hacemos en la normalidad if()y "Data"es una declaración cuando esta condición se hizo realidad. esto " : "actúa como otra cosa y "N/A"es una declaración para la condición de otra cosa. Espero que esto te ayude a entender la lógica.

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

console.log(name);

Waqas Qayum
fuente
2

Use org.apache.commons.lang3.StringUtils:

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

Simple y claro:

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

Versión larga:

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

o cómo lo estoy usando para que quede claro para otros lectores de código:

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

Puede usar el operador ternario en java.

Sintaxis:

Condition ? Block 1 : Block 2

Entonces en tu código puedes hacer así,

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

Para obtener más información, puede consultar este recurso.

Shiva
fuente
44
Esta es una pregunta de 6 años y ha aceptado la respuesta. Su respuesta no proporciona nada nuevo -1
Makky
-3
name = city.getName()!=null?city.getName():"N/A"
Sombra
fuente
44
En lugar de solo publicar un código, ayudaría a OP más al explicar la técnica. ¿Cómo funciona, por qué funciona?
Zabuzard
1
Poner espacios alrededor de sus operadores hace que sea mucho más fácil de leer y mantener.
geowar