Java Method具有IF-THEN-ELSE语句的功能

时间:2012-02-21 04:51:02

标签: java

是否有任何方法在Oracle / PLSQL中的decode函数中具有IF-THEN-ELSE语句的功能?

5 个答案:

答案 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 CacheLoadingCache

否则请转到switch或其他基于语言的条件语句,因为它会使您的代码更具可读性和可维护性。