2016-12-18 111 views
1

我寫一個Android應用程序,我使用的是使用Java類有一個循環,如下所示:替代getOrDefault低於API 24設備Android

for (Set<I> itemset : candidateList2) { 
    supportCountMap.put(itemset, supportCountMap.getOrDefault(itemset,0)+ 1); 
} 

我得到警告呼叫需要API等級24 (目前最小爲16)的方法:

supportCountMap.getOrDefault(itemset,0)+1); 

是否有任何解決方法,這種方法使得它能夠在手機上正常工作與SDK版本比24如棉花糖(23)和棒棒堂(21)低?

+2

你可以查看[源代碼](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/Map。 java#Map.getOrDefault%28java.lang.Object%2Cjava.lang.Object%29)作爲默認實現。 – Bubletan

回答

3

你總是可以自己實現相同的邏輯:

for (Set<I> itemset : candidateList2) { 
    Integer value = supportCountMap.get(itemset); 
    if (value == null) { 
     value = 0; 
    } 
    supportCountMap.put(itemset, value + 1); 
} 
+0

謝謝,這工作得很好。根據上面的@Bubletan的建議,只是一個問題,方法實現檢查HashMap是否包含密鑰,這在上面的代碼片段中是否需要,以及檢查值是否爲空? – ic90

+1

'get'會爲不存在的鍵返回一個'null'。一般來說,使用'containsKey'更安全,因爲地圖可能具有'null'值,但在您的情況下,當您只是使用地圖來保存計數器時,這是多餘的。 – Mureinik

0

我建議創建MapCompat類,複製Map.getOrDefault實施並通過您map作爲一個額外的參數:

public class MapCompat { 

    public static <K, V> V getOrDefault(@NonNull Map<K, V> map, K key, V defaultValue) { 
     V v; 
     return (((v = map.get(key)) != null) || map.containsKey(key)) 
       ? v 
       : defaultValue; 
    } 
} 

這種模式被廣泛使用在Android support libraries,例如ContextCompat.getColor就是很好的例子

相關問題