Java API 24以下Android设备的getOrDefault替代方案

Java API 24以下Android设备的getOrDefault替代方案,java,android,dictionary,Java,Android,Dictionary,我正在编写一个Android应用程序,我正在使用一个Java类,该类使用一个循环,如下所示: for (Set<I> itemset : candidateList2) { supportCountMap.put(itemset, supportCountMap.getOrDefault(itemset,0)+ 1); } 此方法是否有任何变通方法,可以在SDK版本低于24的手机上使用,例如棉花糖(23)和棒棒糖(21)?您可以自己实现相同的逻辑: for (Set<

我正在编写一个Android应用程序,我正在使用一个Java类,该类使用一个循环,如下所示:

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

此方法是否有任何变通方法,可以在SDK版本低于24的手机上使用,例如棉花糖(23)和棒棒糖(21)?

您可以自己实现相同的逻辑:

for (Set<I> itemset : candidateList2) {
    Integer value = supportCountMap.get(itemset);
    if (value == null) {
        value = 0;
    }
    supportCountMap.put(itemset, value + 1);
}
for(集合项集合:candidateList2){
整数值=supportCountMap.get(itemset);
如果(值==null){
数值=0;
}
supportCountMap.put(项集,值+1);
}

我建议创建
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;
    }
}
公共类MapCompat{
公共静态V getOrDefault(@NonNull映射,K键,V defaultValue){
V V;
返回((v=map.get(key))!=null)| | map.containsKey(key))
v
:默认值;
}
}

此模式广泛用于,例如,是一个很好的示例

Kotlin:只需使用elvis运算符:

  val value = map[key] ?: 0

如果
map[key]
为空,则值将为0。

您可以检查默认实现。谢谢,这非常有效。只是一个问题,根据上面@Bubletan的建议,方法实现检查HashMap是否包含键,这在上面的代码片段中是否有必要,也就是说,与检查值是否为null结合使用?
get
将为不存在的键返回
null
。一般来说,使用
containsKey
更安全,因为映射可能具有
null
值,但在您的情况下,仅使用映射来保存计数器是多余的。
  val value = map[key] ?: 0