Inspectopedia Help

Simplifiable 'Map' operations

Reports common usage patterns of java.util.Map and suggests replacing them with: getOrDefault(), computeIfAbsent(), putIfAbsent(), merge(), or replaceAll().

Example:

map.containsKey(key) ? map.get(key) : "default";

After the quick-fix is applied:

map.getOrDefault(key, "default");

Example:

List<String> list = map.get(key); if (list == null) { list = new ArrayList<>(); map.put(key, list); }

After the quick-fix is applied:

map.computeIfAbsent(key, localKey -> new ArrayList<>());

Example:

Integer val = map.get(key); if (val == null) map.put(key, 1); else map.put(key, val + 1);

After the quick-fix is applied:

map.merge(key, 1, (localKey, localValue) -> localValue + 1);

Example:

for (Map.Entry<String, String> entry : map.entrySet()) { map.put(entry.getKey(), transform(entry.getValue())); }

After the quick-fix is applied:

map.replaceAll((localKey, localValue) -> transform(localValue));

Note that the replacement with computeIfAbsent() or merge() might work incorrectly for some Map implementations if the code extracted to the lambda expression modifies the same Map. By default, the warning doesn't appear if this code might have side effects. If necessary, enable the Suggest replacement even if lambda may have side effects option to always show the warning.

Also, due to different handling of the null value in old methods like put() and newer methods like computeIfAbsent() or merge(), semantics might change if storing the null value into given Map is important. The inspection won't suggest the replacement when the value is statically known to be nullable, but for values with unknown nullability the replacement is still suggested. In these cases, we recommended suppressing the warning and adding an explanatory comment.

This inspection reports only if the language level of the project or module is 8 or higher.

Inspection options

Option

Type

Default

Suggest conversion to Map.computeIfAbsent

Checkbox

true

Suggest conversion to Map.getOrDefault

Checkbox

true

Suggest conversion to Map.putIfAbsent

Checkbox

true

Suggest conversion to Map.merge

Checkbox

true

Suggest conversion to Map.replaceAll

Checkbox

true

Treat 'get(k) != null' the same as 'containsKey(k)' (may change semantics)

Checkbox

false

Suggest replacement even if lambda may have side effects

Checkbox

false

Inspection Details

Available in:

IntelliJ IDEA 2023.3, Qodana for JVM 2023.3

Plugin:

Java, 233.SNAPSHOT

Last modified: 13 July 2023