## Why is this an issue?

Map computeIfAbsent and computeIfPresent methods are convenient to avoid the cumbersome process to check if a key exists or not, followed by the addition of the entry. However, when the function used to compute the value returns `null`, the entry `key->null` will not be added to the Map. Furthermore, in the case of `computeIfPresent`, if the key is present the entry will be removed. These methods should therefore not be used to conditionally add an entry with a null value. The traditional way should be used instead.

This rule raises an issue when `computeIfAbsent` or `computeIfPresent` is used with a lambda always returning null.

### Noncompliant code example

    map.computeIfAbsent(key, k -> null); // Noncompliant, the map will not contain an entry key->null.
    map.computeIfPresent(key, (k, oldValue) -> null); // Noncompliant

### Compliant solution

    if (!map.containsKey(key)) {
        map.put(key, null);
    }
    if (map.containsKey(key)) {
        map.put(key, null);
    }

## Resources

### Related rules

- {rule:java:S3824} - "Map.get" and value test should be replaced with a single method call