Вы ищете метод compute
, также добавленный в Java 8. Этот метод принимает ключ, который вы используете, а также BiFunction
для вычисления того, каким должно быть новое значениена основе ключа и существующего значения.Так что в вашем случае это будет выглядеть примерно так:
countMap.compute(key, (k, oldValue) -> oldValue == null ? 1 : oldValue + 1);
Когда ключ, который вы даете, еще не существует на карте, oldValue в BiFunction
будет null
;если вы вернете null
в BiFunction
, на карту ничего не попадет.
Требуется немного привыкнуть, но это очень мощный метод, когда вы освоите его.Он может быть более читабельным (хотя и более многословным) со ссылкой на метод вместо встроенной лямбды:
countMap.compute(key, this::incrementOrSetToOne);
// ... some other code ...
private Integer incrementOrSetToOne(KeyType key, Integer oldValue) {
return oldValue == null ? 1 : oldValue + 1;
}