ChatGPT解决这个技术问题 Extra ChatGPT

Short form for Java if statement

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?

I assume you got your if logic the wrong way round.
if (city.getName()!=null){name = city.getName();}else{name="N/A"}
@SteveKuo There are three spaces you can remove. ;)
if (city.getName()!= null) name = city.getName(); else name="N/A";

d
duffymo

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());

+1, though you have redundant parentheses. I would have written: name = city.getName() == null ? "N/A" : city.getName();
A matter of style and taste: I like to make the grouping of the boolean clause clear.
Whatever - I used DeMorgan's theorem and got what you needed. No need to edit, as long as you express the logic correctly.
FYI the outer parenthesis are unnecessary. You can just do name = city.getName()==null ? "N/A" : city.getName()
Won't String cityName = city.getName(); throw a NullPointerException if city == null? I'd therefore say your middle solution is definitely the best (PS and I approve of the 'unnecessary' parentheses! People need to remember that 99% of coding is communicating with other people (and your future self), not the compiler - otherwise we'd use c!)
P
Peter Lawrey

To avoid calling .getName() twice I would use

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

In a multi user system with a mutable city, there could be an intervening city.setName(null). Your answer neatly handles that.
S
Sam Goldberg

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) ...

R
Reza Baradaran Gazorisangi

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.


S
Suragch

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 the if

? means then

: means else

It is the same as

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

d
digitebs

in java 8:

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

I
IgniteCoders

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.


d
dreamer

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";
}

This was not asked so still -1.
A
Alessio Koci
name = (city.getName() != null) ? city.getName() : "N/A";

W
Waqas Qayum

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);


P
Paul Rambags

Use org.apache.commons.lang3.StringUtils:

name = StringUtils.defaultString(city.getName(), "N/A");

R
RamenChef
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: http://www.cafeaulait.org/course/week2/43.html


V
Vasile Doe

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";

P
Peter Csala

You could make it much easier this way :

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

Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
V
Victor1125

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");

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

Instead of just posting some code you would help OP more by explaining the technique. How does it work, why does it work?
Putting spaces around your operators make it much easier to read & maintain.