2012-02-21 22 views
-1

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

+0

我不确定你真的问/需要什么。简单的“if {...} else {...}”有什么问题? – BalusC 2012-02-21 04:54:42

+0

@BalusC请看看这个。 http://www.techonthenet.com/oracle/functions/decode.php。这不是比'if {...} else {...}'简单吗? – Bishan 2012-02-21 04:59:25

回答

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; 
} 
+0

在此解决方案中,最多只需计算一个单一值。 – 2012-02-21 05:18:56

0

不是

表达式? Dothis:别的事情有点类似。

i == 0?真:假是你在找什么?

2

我希望在JAVA中不存在这样的方法,如果你的情况只是byte/short/char/int,你可以使用if-then-else或者简单地切换块。

+0

自Java 5以来,自Java 5以来,甚至是'String',或'enum'。 – BalusC 2012-02-21 05:10:03

1

从您的问题意见提供the link

您可以使用解码功能在SQL语句中如下:

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); 
+1

关于解码的好处是每个值只在需要时才计算。但在你的解决方案中,值必须先计算出来。 – 2012-02-21 05:18:11

0

如果你正在寻找一个地图就像集合,只根据请求创建它的值,但缓存先前请求的值,看一下Google Guava CacheLoadingCache

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