如何在Java中获取第一个非null值?

问题

是否有SQL的等效SQL'sCOALESCE功能?也就是说,有没有办法返回几个变量的第一个非空值?

例如

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

我想以某种方式有一个语句将返回第一个非空值的值a,bc-在这种情况下,它将返回b,或4.4。 (类似于sql方法 - returnCOALESCE(a,b,c))。我知道我可以用以下方式明确地做到:

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

但我想知道是否有任何内置的,可接受的功能来实现这一目标。


#1 热门回答(116 赞)

Apache Commons Lang 3
ObjectUtils.firstNonNull(T...)
Java 8 Stream
Stream.of(T...).filter(Objects::nonNull).findFirst().orElse(null)


#2 热门回答(89 赞)

不,没有。

你最接近的是:

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

出于有效的原因,你可以按如下方式处理常见情况:

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

#3 热门回答(50 赞)

如果只检查两个变量并且你正在使用Guava,则可以使用MoreObjects.firstNonNull(T first, T second)