> Java > java지도 시간 > Collectors.toMap이 Null 항목 값으로 NullPointerException을 발생시키는 이유는 무엇입니까?

Collectors.toMap이 Null 항목 값으로 NullPointerException을 발생시키는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-11 21:44:03
원래의
434명이 탐색했습니다.

Why Does Collectors.toMap Throw a NullPointerException with Null Entry Values?

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 값이 포함된 스트림의 키-값 쌍을 포함하는 맵이 생성됩니다.

고려 사항

이 해결 방법에는 다음 고려 사항이 있다는 점에 유의하는 것이 중요합니다.

  • Collectors.toMap과 달리 동일한 키가 여러 번 있으면 자동으로 값을 대체합니다.
  • HashMap을 기본 데이터 구조로 사용하므로 모든 시나리오에 적합하지 않을 수 있습니다.

이러한 고려 사항이 사용 사례에 적합하지 않은 경우 대안을 고려해야 할 수도 있습니다. 다른 Collector 구현을 사용하거나 기존의 일반 for 루프로 되돌리는 등의 접근 방식을 사용합니다.

위 내용은 Collectors.toMap이 Null 항목 값으로 NullPointerException을 발생시키는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿