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 값을 저장하는 것이 중요한 경우 의미가 변경될 수 있습니다. 해당 값이 정적으로 null 가능한 값으로 알려진 경우 검사에서 대체를 제안하지 않지만 알려지지 않은 null 값 가능성이 있는 값에는 대체가 제안됩니다. 이 경우 경고를 억제하고 주석 설명을 추가하는 것이 좋습니다.