Java 8 Stream API의 강력한 유틸리티인 Collectors.toMap 메서드는 다음을 제공합니다. 객체 스트림을 맵으로 변환하는 간결한 방법입니다. 그러나 사용자가 null 값을 맵 항목으로 통합하려고 시도할 때 난해한 NullPointerException이 발생할 수 있습니다.
맵에서 null 값을 항목으로 허용함에도 불구하고 Collectors.toMap은 다음 중 하나라도 발생할 경우 NullPointerException을 발생시킵니다. 스트림의 값이 null입니다. 이 동작은 직관에 어긋나고 개발자에게 혼란의 원인이 될 수 있으므로 우려를 낳습니다.
이 예외는 내부적으로 HashMap을 사용하는 Collectors.toMap의 특정 구현으로 인해 발생합니다. HashMap의 내부 작동으로 인해 항목에 대한 null 값을 처리할 수 없습니다. null 값이 발생하면 HashMap에서 NullPointerException이 발생합니다.
이 문제를 해결하기 위한 해결 방법은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!