Null 항목 값이 있는 Collectors.toMap에서 NullPointerException이 발생함
소개
Java 8 , Collectors.toMap은 키-값 쌍 스트림에서 맵을 생성하는 편리한 방법입니다. 그러나 스트림의 값 중 하나가 null인 경우 이 메서드는 NullPointerException을 발생시킵니다. 지도에 문제 없이 null 값이 포함될 수 있다는 점을 고려하면 이는 이상해 보입니다.
Null 예외의 이유
이 동작의 이유는 Collector의 기본 구현 때문입니다. toMap은 HashMap을 기본 데이터 구조로 사용합니다. HashMap은 키에 대해 null 값을 허용하지 않지만 값에 대해서는 null 값을 허용합니다. 그러나 Collectors.toMap은 키에 대한 null 값을 발견하면 해당 값(null)에 대한 기본값을 사용하려고 시도하며 이로 인해 NullPointerException이 발생합니다.
Java 8 Solution
Java 8에서 이 문제를 해결하려면 HashMap을 수동으로 생성하고 스트림의 키-값 쌍으로 채우는 해결 방법을 사용할 수 있습니다.
Map<Integer, Boolean> collect = list.stream() .collect(HashMap::new, (m,v)->m.put(v.getId(), v.getAnswer()), HashMap::putAll);
이것은 해결 방법은 특별히 우아하지는 않지만 예상되는 결과를 생성합니다. 즉, 스트림에 null 값이 있는 모든 키에 대해 null 값이 포함된 스트림의 키-값 쌍을 포함하는 맵이 생성됩니다.
고려 사항
이 해결 방법에는 다음 고려 사항이 있다는 점에 유의하는 것이 중요합니다.
이러한 고려 사항이 사용 사례에 적합하지 않은 경우 대안을 고려해야 할 수도 있습니다. 다른 Collector 구현을 사용하거나 기존의 일반 for 루프로 되돌리는 등의 접근 방식을 사용합니다.
위 내용은 Collectors.toMap이 Null 항목 값으로 NullPointerException을 발생시키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!