В Java возможна ситуация, когда при использовании метода Collectors.toMap
происходит исключение NullPointerException
. Это происходит в том случае, если одно из значений в коллекции, которую мы хотим преобразовать в карту, равно null
.
Возможно, это будет непонятно для новичков, ведь, по идее, карты могут содержать null
значения. Однако, стоит знать, что Collectors.toMap
не позволяет использовать null
значения.
Рассмотрим пример. Пусть есть некий список объектов Person
, где у каждого объекта есть поле id
и поле name
. Мы хотим преобразовать этот список в карту, где ключами будет id
, а значениями — name
. Однако, у одного из объектов Person
поле name
равно null
.
class Person { int id; String name; Person(int id, String name) { this.id = id; this.name = name; } // геттеры и сеттеры } //... List<Person> personList = new ArrayList<>(); personList.add(new Person(1, "Иван")); personList.add(new Person(2, null)); personList.add(new Person(3, "Петр")); Map<Integer, String> personMap = personList.stream().collect(Collectors.toMap(Person::getId, Person::getName));
В данном случае при выполнении последней строки кода произойдёт NullPointerException
, поскольку Collectors.toMap
не позволяет использовать null
значения.
Для обхода этой проблемы можно использовать метод Collectors.toMap
с тремя аргументами, где последний аргумент является функцией, определяющей поведение в случае дублирования ключей. В данном случае мы можем просто вернуть первое значение, игнорируя дубликаты.
Map<Integer, String> personMap = personList.stream().collect(Collectors.toMap(Person::getId, Person::getName, (name1, name2) -> name1));
Таким образом, мы можем избежать NullPointerException
при работе с Collectors.toMap
, даже если в нашей коллекции присутствуют null
значения.
Добавить комментарий