BiFunction Object в методе вычисления Map - PullRequest
0 голосов
/ 02 июля 2019

Я хочу создать объект BiFunction (Lambda) и использовать его в методе вычисления карты. Он будет правильно скомпилирован, но во время выполнения выдаст исключение NullPointerException.

private BiFunction<String, Integer, Integer> biFunctionWithAddition(final Integer addition) {
        return (model, quantity) -> model == null ? addition : quantity + addition;
    }

hashmap.compute(i, biFunctionWithAddition(1)) //throw NullPointerException


//the one that can work should be:
hashmap.compute(i, (num, quantity) -> num == null : 1 ? quantity + 1);

1 Ответ

1 голос
/ 02 июля 2019

Метод вычисления также вызывается, если ключ отсутствует на карте, поэтому вы можете создать значение для ключа.Итак, в вашем случае это произойдет:

hashmap.compute("KEY_NOT_IN_MAP", biFunctionWithAddition(1));

будет вызывать вашу лямбда-функцию следующим образом:

("KEY_NOT_IN_MAP",null) ->KEY_NOT_IN_MAP" == null ? addition : null + addition;

, чтобы вы могли видеть, что ключ (модель) не равен нулю, поэтому вторая частьтроичный оператор будет оценен и потерпит неудачу с NPE из-за этого: null + addition;

Ваше количество в лямбде равно нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...