2012-02-21 19 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或其他基於語言的條件語句,因爲這會使您的代碼更具可讀性和可維護性。