froadie froadie - 8 days ago 6
Java Question

How to get the first non-null value in Java?

Is there a Java equivalent of SQL's

COALESCE
function? That is, is there any way to return the first non-null value of several variables?

e.g.

Double a = null;
Double b = 4.4;
Double c = null;


I want to somehow have a statement that will return the first non-null value of
a
,
b
, and
c
- in this case, it would return
b
, or 4.4. (Something like the sql method - return
COALESCE(a,b,c)
). I know that I can do it explicitly with something like:

return a != null ? a : (b != null ? b : c)


But I wondered if there was any built-in, accepted function to accomplish this.

Answer

No, there isn't.

The closest you can get is:

public static <T> T coalesce(T ...items) {
    for(T i : items) if(i != null) return i;
    return null;
}

For efficient reasons, you can handle the common cases as follows:

public static <T> T coalesce(T a, T b) {
    return a == null ? b : a;
}
public static <T> T coalesce(T a, T b, T c) {
    return a != null ? a : (b != null ? b : c);
}
public static <T> T coalesce(T a, T b, T c, T d) {
    return ...
}
Comments