I know there is a way for writing a Java if statement in short form.
if (city.getName() != null) {
name = city.getName();
} else {
name="N/A";
}
Does anyone know how to write the short form for the above 5 lines into one line?
16 Answers
Use the ternary operator:
name = ((city.getName() == null) ? "N/A" : city.getName());
I think you have the conditions backwards - if it's null, you want the value to be "N/A".
What if city is null? Your code *hits the bed in that case. I'd add another check:
name = ((city == null) || (city.getName() == null) ? "N/A" : city.getName());
To avoid calling .getName() twice I would use
name = city.getName();
if (name == null) name = "N/A";
The way to do it is with ternary operator:
name = city.getName() == null ? city.getName() : "N/A"
However, I believe you have a typo in your code above, and you mean to say:
if (city.getName() != null) ...
The ? : operator in Java
In Java you might write:
if (a > b) {
max = a;
}
else {
max = b;
}
Setting a single variable to one of two states based on a single condition is such a common use of if-else that a shortcut has been devised for it, the conditional operator, ?:. Using the conditional operator you can rewrite the above example in a single line like this:
max = (a > b) ? a : b;
(a > b) ? a : b; is an expression which returns one of two values, a or b. The condition, (a > b), is tested. If it is true the first value, a, is returned. If it is false, the second value, b, is returned. Whichever value is returned is dependent on the conditional test, a > b. The condition can be any expression which returns a boolean value.
I'm always forgeting how to use the ?: ternary operator. This supplemental answer is a quick reminder. It is shorthand for if-then-else.
myVariable = (testCondition) ? someValue : anotherValue;
where
()holds theif?meansthen:meanselse
It is the same as
if (testCondition) {
myVariable = someValue;
} else {
myVariable = anotherValue;
}
in java 8:
name = Optional.ofNullable(city.getName()).orElse("N/A")
1. You can remove brackets and line breaks.
if (city.getName() != null) name = city.getName(); else name = "N/A";
2. You can use ?: operators in java.
Syntax:
Variable = Condition ? BlockTrue : BlockElse;
So in your code you can do like this:
name = city.getName() == null ? "N/A" : city.getName();
3. Assign condition result for Boolean
boolean hasName = city.getName() != null;
EXTRA: for curious
In some languages based in JAVA like Groovy, you can use this syntax:
name = city.getName() ?: "N/A";
The operator ?: assign the value returned from the variable which we are asking for. In this case, the value of city.getName() if it's not null.
You can write if, else if, else statements in short form. For example:
Boolean isCapital = city.isCapital(); //Object Boolean (not boolean)
String isCapitalName = isCapital == null ? "" : isCapital ? "Capital" : "City";
This is short form of:
Boolean isCapital = city.isCapital();
String isCapitalName;
if(isCapital == null) {
isCapitalName = "";
} else if(isCapital) {
isCapitalName = "Capital";
} else {
isCapitalName = "City";
}
name = (city.getName() != null) ? city.getName() : "N/A";
here is one line code
name = (city.getName() != null) ? city.getName() : "N/A";
here is example how it work, run below code in js file and understand the result. This ("Data" != null) is condition as we do in normal if() and "Data" is statement when this condition became true. this " : " act as else and "N/A" is statement for else condition. Hope this help you to understand the logic.
name = ("Data" != null) ? "Data" : "N/A";
console.log(name);
Use org.apache.commons.lang3.StringUtils:
name = StringUtils.defaultString(city.getName(), "N/A");
name = ( (city.getName() == null)? "N/A" : city.getName() );
firstly the condition (city.getName() == null) is checked. If yes, then "N/A" is assigned to name or simply name="N/A" or else the value from city.getName() is assigned to name, i.e. name=city.getName().
Things to look out here:
- condition is in the parenthesis followed by a question mark. That's why I write
(city.getName() == null)?. Here the question mark is right after the condition. Easy to see/read/guess even! - value left of colon (
:) and value right of colon (a) value left of colon is assigned when condition is true, else the value right of colon is assigned to the variable.
here's a reference:
Simple & clear:
String manType = hasMoney() ? "rich" : "poor";
long version:
String manType;
if (hasMoney()) {
manType = "rich";
} else {
manType = "poor";
}
or how I'm using it to be clear for other code readers:
String manType = "poor";
if (hasMoney())
manType = "rich";
You could make it much easier this way :
name = city.getName() == null ? city.getName() : "N/A"
In Java 8+ you have 2 solution. With short if statement:
Objects.nonNull(city.getName())? city.getName(): "N/A";
Better solution in your case is use Optional:
Optional.ofNullable(city)
.map(City::getName)
.orElse("N/A");
name = city.getName()!=null?city.getName():"N/A"