Есть ли 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)
Но я задался вопросом, была ли какая-либо встроенная, принятая функция для выполнения этого.
Нет, нет.
Ближайшее, что вы можете получить, это:
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 ...
}
Следуя ответу 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);
}
Object coalesce(Object... objects)
{
for(Object o : object)
if(o != null)
return o;
return null;
}