是否有任何方法在Oracle / PLSQL中的decode
函数中具有IF-THEN-ELSE语句的功能?
答案 0 :(得分:2)
我希望在JAVA中不存在这样的方法,如果你的案例只有if-then-else
,你可以使用byte/short/char/int
或只是切换块。
答案 1 :(得分:1)
不,但你要求的是这样的事情:
interface CaseItem<K, V> {
boolean isDefaultCondition();
@NotNull
K conditionValue();
V calculateResult();
}
public <T, V> V decode(@NotNull T input, CaseItem<K, V> caseItems...) {
if (caseItem == null) {
return null;
}
for (CaseItem<K, V> caseItem : caseItems) {
if (input.equals(caseItem.conditionValue()) {
return caseItem.calculateResult();
} else if (caseItem.isDefaultCondition()) {
return caseItem.calculateResult();
}
}
return null;
}
答案 2 :(得分:1)
来自您在问题评论中提供的the link:
您可以在SQL语句中使用decode函数,如下所示:
SELECT supplier_name, decode(supplier_id, 10000, 'IBM', 10001, 'Microsoft', 10002, 'Hewlett Packard', 'Gateway') result FROM suppliers;
最接近的是条件运算符:
String supplierName = supplierId == 10000 ? "IBM"
: supplierId == 10001 ? "Microsoft"
: supplierId == 10002 ? "Hewlett Packard"
: "Gateway";
或者也许是(静态)字典/地图:
Map<Integer, String> suppliers = new HashMap<Integer, String>();
suppliers.put(10000, "IBM");
suppliers.put(10001, "Microsoft");
suppliers.put(10002, "Hewlett Packard");
suppliers.put(null, "Gateway");
// ...
String supplierName = suppliers.get(supplierId);
if (supplierName == null) supplierName = suppliers.get(null);
答案 3 :(得分:0)
不是
表达? dothis:elseDothis类似的东西。
我== 0? true:false是你在找什么?
答案 4 :(得分:0)
如果您正在寻找仅在请求时创建其值的地图集,但要缓存之前请求的值,请查看Google Guava Cache和LoadingCache。
否则请转到switch
或其他基于语言的条件语句,因为它会使您的代码更具可读性和可维护性。