Kurzform für Java if-Anweisung

201

Ich weiß, dass es eine Möglichkeit gibt, eine Java- ifAnweisung in Kurzform zu schreiben .

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

Weiß jemand, wie man die Kurzform für die obigen 5 Zeilen in eine Zeile schreibt?

Makky
quelle
5
Google ternary Operator in Java :)
CoolBeans
2
Ich nehme an, Sie haben Ihre ifLogik falsch verstanden.
NPE
7
if (city.getName()!=null){name = city.getName();}else{name="N/A"}
Steve Kuo
9
@SteveKuo Es gibt drei Leerzeichen, die Sie entfernen können. ;)
Peter Lawrey
2
if (city.getName()!= null) name = city.getName(); else name="N/A";
Anton Dozortsev

Antworten:

423

Verwenden Sie den ternären Operator:

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

Ich denke, Sie haben die Bedingungen rückwärts - wenn es null ist, möchten Sie, dass der Wert "N / A" ist.

Was ist, wenn die Stadt null ist? Ihr Code * trifft in diesem Fall das Bett. Ich würde noch einen Scheck hinzufügen:

name = ((city == null) || (city.getName() == null) ? "N/A" : city.getName());
Duffymo
quelle
12
+1, obwohl Sie redundante Klammern haben. Ich hätte geschrieben: name = city.getName() == null ? "N/A" : city.getName();
Andres F.
20
Eine Frage von Stil und Geschmack: Ich möchte die Gruppierung der Booleschen Klausel klarstellen.
Duffymo
4
Wie auch immer - ich habe den Satz von DeMorgan verwendet und bekommen, was Sie brauchten. Sie müssen nicht bearbeiten, solange Sie die Logik korrekt ausdrücken.
Duffymo
2
Zu Ihrer Information, die äußere Klammer ist nicht erforderlich. Sie können einfach tunname = city.getName()==null ? "N/A" : city.getName()
Steve Kuo
4
Wirst du kein Wenn String cityName = city.getName();werfen ? Ich würde daher sagen, dass Ihre mittlere Lösung definitiv die beste ist (PS und ich sind mit den "unnötigen" Klammern einverstanden! Die Leute müssen sich daran erinnern, dass 99% der Codierung mit anderen Leuten (und Ihrem zukünftigen Selbst) kommuniziert, nicht mit dem Compiler - ansonsten wir würden c verwenden!)NullPointerExceptioncity == null
Alex
32

Um nicht .getName()zweimal anzurufen, würde ich verwenden

name = city.getName();
if (name == null) name = "N/A";
Peter Lawrey
quelle
2
In einem Mehrbenutzersystem mit einer veränderlichen Stadt kann es zu einer Intervention kommen city.setName(null). Ihre Antwort erledigt das ordentlich.
Emory
27

Der Weg, dies zu tun, ist mit dem ternären Operator:

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

Ich glaube jedoch, dass Sie oben einen Tippfehler in Ihrem Code haben, und Sie wollen sagen:

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

Das ? : Operator in Java

In Java könnten Sie schreiben:

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

Das Setzen einer einzelnen Variablen auf einen von zwei Zuständen basierend auf einer einzelnen Bedingung ist eine so häufige Verwendung von if-else, dass eine Verknüpfung für sie, den bedingten Operator, erstellt wurde. Mit dem bedingten Operator können Sie das obige Beispiel in einer einzigen Zeile wie folgt umschreiben:

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

(a> b)? a: b; ist ein Ausdruck, der einen von zwei Werten a oder b zurückgibt. Die Bedingung (a> b) wird getestet. Wenn es wahr ist, wird der erste Wert a zurückgegeben. Wenn es falsch ist, wird der zweite Wert, b, zurückgegeben. Welcher Wert zurückgegeben wird, hängt vom bedingten Test ab, a> b. Die Bedingung kann ein beliebiger Ausdruck sein, der einen booleschen Wert zurückgibt.

Reza Baradaran Gazorisangi
quelle
21

in Java 8:

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

Ich vergesse immer, wie man den ?: ternären Operator benutzt . Diese ergänzende Antwort ist eine kurze Erinnerung. Es ist eine Abkürzung für if-then-else.

myVariable = (testCondition) ? someValue : anotherValue;

wo

  • () hält die if
  • ? meint then
  • : meint else

Es ist das gleiche wie

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

Sie können if, else if, elseAnweisungen in Kurzform schreiben . Beispielsweise:

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

Dies ist eine Kurzform von:

Boolean isCapital = city.isCapital();
String isCapitalName;
if(isCapital == null) {
    isCapitalName = "";
} else if(isCapital) {
    isCapitalName = "Capital";
} else {
    isCapitalName = "City";
}
OctopusSD
quelle
1
Dies wurde nicht so noch -1 gefragt.
Makky
8

1. Sie können Klammern und Zeilenumbrüche entfernen .

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

2. Sie können ?: Operatoren in Java verwenden.

Syntax:

Variable = Condition ? BlockTrue : BlockElse;

In Ihrem Code können Sie also Folgendes tun:

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

3. Weisen Sie das Bedingungsergebnis für Boolean zu

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

ZUSÄTZLICH: für Neugierige

In einigen Sprachen, die auf JAVAlike basieren Groovy, können Sie diese Syntax verwenden:

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

Der Operator ?:weist den von der gewünschten Variable zurückgegebenen Wert zu. In diesem Fall der Wert von city.getName()wenn nicht null.

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

Zunächst wird der Zustand (city.getName() == null)überprüft. Wenn ja, "N/A"wird der Name oder einfach zugewiesen, oder name="N/A"der Wert von city.getName()wird dem Namen zugewiesen, d. H.name=city.getName() .

Dinge, die Sie hier beachten sollten:

  1. Bedingung ist in der Klammer gefolgt von einem Fragezeichen. Deshalb schreibe ich (city.getName() == null)?. Hier steht das Fragezeichen direkt nach der Bedingung. Einfach zu sehen / zu lesen / sogar zu raten!
  2. Wert links von Doppelpunkt ( :) und Wert rechts von Doppelpunkt (a) Wert links von Doppelpunkt wird zugewiesen, wenn die Bedingung erfüllt ist, andernfalls wird der Wert rechts von Doppelpunkt der Variablen zugewiesen.

Hier ist eine Referenz: http://www.cafeaulait.org/course/week2/43.html

Arafe Zawad Sajid
quelle
3

Hier ist ein Zeilencode

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

Hier ist ein Beispiel, wie es funktioniert, führen Sie den folgenden Code in der js-Datei aus und verstehen Sie das Ergebnis. Dies ("Data" != null)ist eine Bedingung wie im Normalfall if()und "Data"eine Aussage, wann diese Bedingung erfüllt wurde. Dies " : "wirkt wie sonst und "N/A"ist eine Aussage für eine andere Bedingung. Hoffe das hilft dir die Logik zu verstehen.

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

console.log(name);

Waqas Qayum
quelle
2

Verwenden Sie org.apache.commons.lang3.StringUtils:

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

Einfach und klar:

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

lange Version:

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

oder wie ich es benutze, um anderen Codelesern klar zu sein:

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

Sie können den ternären Operator in Java verwenden.

Syntax:

Condition ? Block 1 : Block 2

In Ihrem Code können Sie also Folgendes tun:

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

Weitere Informationen finden Sie in dieser Ressource.

Shiva
quelle
4
Dies ist eine 6 Jahre alte Frage und hat die Antwort akzeptiert. Ihre Antwort liefert nichts Neues -1
Makky
-3
name = city.getName()!=null?city.getName():"N/A"
Schatten
quelle
4
Anstatt nur Code zu veröffentlichen, würden Sie OP mehr helfen, indem Sie die Technik erklären. Wie funktioniert es, warum funktioniert es?
Zabuzard
1
Das Platzieren von Leerzeichen um Ihre Bediener erleichtert das Lesen und Verwalten erheblich.
Geowar