Как получить первое ненулевое значение в Java?

Есть ли Java, эквивалентный из SQL COALESCE функция? Таким образом, есть ли какой-либо способ возвратить первое ненулевое значение нескольких переменных?

например.

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

Я хочу так или иначе иметь оператор, который возвратит первое ненулевое значение a, b, и c - в этом случае это возвратилось бы b, или 4.4. (Что-то как sql метод - возврат COALESCE(a,b,c)). Я знаю, что могу сделать это явно с чем-то как:

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

Но я задался вопросом, была ли какая-либо встроенная, принятая функция для выполнения этого.

143
задан Georg Fritzsche 22 May 2010 в 20:52
поделиться

3 ответа

Нет, нет.

Ближайшее, что вы можете получить, это:

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 ...
}
102
ответ дан 23 November 2019 в 22:56
поделиться

Следуя ответу LES2, вы можете устранить некоторые повторения в эффективной версии, вызвав перегруженную функцию:

public static <T> T coalesce(T a, T b) {
    return a != null ? a : b;
}
public static <T> T coalesce(T a, T b, T c) {
    return a != null ? a : coalesce(b,c);
}
public static <T> T coalesce(T a, T b, T c, T d) {
    return a != null ? a : coalesce(b,c,d);
}
public static <T> T coalesce(T a, T b, T c, T d, T e) {
    return a != null ? a : coalesce(b,c,d,e);
}
24
ответ дан 23 November 2019 в 22:56
поделиться
Object coalesce(Object... objects)
{
    for(Object o : object)
        if(o != null)
            return o;
    return null;
}
-2
ответ дан 23 November 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: