适用于API 24 Android以下设备的getOrDefault替代方案

ic9*_*c90 6 java android dictionary

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

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

我收到警告呼叫需要API级别24(当前最小值为16)的方法:

supportCountMap.getOrDefault(itemset,0)+1);
Run Code Online (Sandbox Code Playgroud)

该方法是否有任何解决方法,以便它可以在SDK版本低于24的手机上工作,例如Marshmallow(23)和Lollipop(21)?

Sau*_*kar 11

Kotlin:只需使用 elvis 运算符:

  val value = map[key] ?: 0
Run Code Online (Sandbox Code Playgroud)

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


Krz*_*cki 6

我建议创建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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这种模式广泛用于Android 支持库,例如ContextCompat.getColor是很好的例子


Mur*_*nik 4

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

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