>  기사  >  Java  >  Null 항목 값을 처리할 때 Collectors.toMap이 NullPointerException을 발생시키는 이유는 무엇입니까?

Null 항목 값을 처리할 때 Collectors.toMap이 NullPointerException을 발생시키는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-11 06:10:03413검색

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

Null 항목 값이 있는 Collectors.toMap의 NullPointerException

소개

Java 8 Stream API의 강력한 유틸리티인 Collectors.toMap 메서드는 다음을 제공합니다. 객체 스트림을 맵으로 변환하는 간결한 방법입니다. 그러나 사용자가 null 값을 맵 항목으로 통합하려고 시도할 때 난해한 NullPointerException이 발생할 수 있습니다.

문제 설명

맵에서 null 값을 항목으로 허용함에도 불구하고 Collectors.toMap은 다음 중 하나라도 발생할 경우 NullPointerException을 발생시킵니다. 스트림의 값이 null입니다. 이 동작은 직관에 어긋나고 개발자에게 혼란의 원인이 될 수 있으므로 우려를 낳습니다.

원인

이 예외는 내부적으로 HashMap을 사용하는 Collectors.toMap의 특정 구현으로 인해 발생합니다. HashMap의 내부 작동으로 인해 항목에 대한 null 값을 처리할 수 없습니다. null 값이 발생하면 HashMap에서 NullPointerException이 발생합니다.

Java 8 솔루션

이 문제를 해결하기 위한 해결 방법은 HashMap을 수동으로 생성하고 스트림 요소로 채우는 것입니다. 이는 다음 코드를 사용하여 달성할 수 있습니다.

Map<Integer, Boolean> collect = list.stream()
        .collect(HashMap::new, (m,v)->m.put(v.getId(), v.getAnswer()), HashMap::putAll);

이 코드는 NullPointerException을 방지하면서 Collectors.toMap의 기능을 효과적으로 시뮬레이션합니다. 이 솔루션은 중복 키가 있는 경우 자동으로 값을 바꿀 수 있습니다.

결론

Collectors.toMap 및 null 값과 관련된 NullPointerException은 OpenJDK 구현에서 알려진 문제입니다. 제공된 해결 방법을 통해 개발자는 이 방법을 계속 사용할 수 있지만 제한 사항과 잠재적인 함정을 이해하는 것이 중요합니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.