javacoalesce

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.


Solution

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