java.util.Map の使用パターンを報告し、
getOrDefault()、computeIfAbsent()、putIfAbsent()、merge()、または replaceAll() への置換を提案します。
例:
map.containsKey(key) ? map.get(key) : "default";
クイックフィックス適用後:
map.getOrDefault(key, "default");
例:
List<String> list = map.get(key);
if (list == null) {
list = new ArrayList<>();
map.put(key, list);
}
クイックフィックス適用後:
map.computeIfAbsent(key, localKey -> new ArrayList<>());
例:
Integer val = map.get(key);
if (val == null) map.put(key, 1);
else map.put(key, val + 1);
クイックフィックス適用後:
map.merge(key, 1, (localKey, localValue) -> localValue + 1);
例:
for (Map.Entry<String, String> entry : map.entrySet()) {
map.put(entry.getKey(), transform(entry.getValue()));
}
クイックフィックス適用後:
map.replaceAll((localKey, localValue) -> transform(localValue));
ラムダ式に抽出されるコードが同じ Map を修飾している場合、一部の Map の実装では computeIfAbsent() または merge() への置換が正常に機能しない可能性があります。 このコードに副作用があると思われる場合でも、デフォルトでは警告は表示されません。 警告を常に表示する必要がある場合は、「ラムダに副作用があると思われる場合も置換を提案する」オプションを有効にします。
put() のような古いメソッドや computeIfAbsent() / merge() のような新しいメソッドでは null 値の処理が異なるため、セマンティクスが変更される可能性があります。指定の Map に null 値を格納することが重要な場合、この事を考慮する必要があります。 対象の値が静的に nullable であると分かっている場合、このインスペクションは置換を提案しません。ただし、null 許容性が不明な値については、置換が提案されます。 そのような場合は、警告を抑止して、説明用のコメントを追加することをお勧めします。