Почему вы ожидаете, что он будет обрабатывать NullPointerException
?
Лямбда-выражение val->val
эквивалентно:
new ToIntFunction<Integer> () {
int applyAsInt(Integer value) {
return value;
}
}
И когда метод, возвращающий int
type возвращает Integer
, происходит автоматическая распаковка. Это означает, что вызывается value.intValue()
, и если value
равно null
, выбрасывается NullPointerException
.
mapToInt()
просто вызывает метод applyAsInt()
экземпляра ToIntFunction
, переданного ему для каждый элемент Stream
.
У него нет причин проверять, является ли элемент null
, и каким-либо образом обрабатывать его, поскольку он не может знать, как вы sh поступать с null
с. Это работа экземпляра ToIntFunction
, чтобы решить это, а ваш ToIntFunction
не обрабатывает null
с.