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.
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 ...
}
The efficiency reason is that an array allocation will happen each time you invoke the ...
version of the method. This could be wasteful for hand-fulls of items, which I suspect will be common usage.