Java 16, Stream의 toList() 사용시 UnsupportedOperationException 이 발생했던 이야기
Java 16에서는 Stream에서 편리하게 List를 만들어 주는 toList()가 존재한다. 그러나 나처럼 함부로 사용을 하게 되면 문제가 발생하는데...
문제가 발생했던 상황은 아래와 같다.
List<Integer> result = Stream.of(19,21,17).toList();
result.sort(Comparator.naturalOrder());
기존에는 Stream의 .collect(Collectors.toList()) 를 이용해서 List 형태로 값을 돌려 받았었는데, 못된 Intellij 가 나에게 toList()를 사용하라고 문구를 띄워줬고 위와 같이 변경을 했다.
그 결과 아래와 같은 에러가 발생했다.
Exception in thread "main" java.lang.UnsupportedOperationException
at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142)
at java.base/java.util.ImmutableCollections$AbstractImmutableList.sort(ImmutableCollections.java:261)
at com.chb.chapter3.Problem4.solution(Problem4.java:22)
at com.chb.chapter3.Problem4.main(Problem4.java:16)
위의 에러가 발생 한 이유는 toList() 를 이용해 제공 받은 List가 unmodifiableList() 를 통해 변경이 불가능하게 되었기 때문이다.
toList() 함수 내부는 아래와 같았다.
@SuppressWarnings("unchecked")
default List<T> toList() {
return (List<T>) Collections.unmodifiableList(new ArrayList<>(Arrays.asList(this.toArray())));
}
toList() 를 사용해 결과를 받게 되면 수정이 불가능 하므로 아래와 같이 기존에 사용하던 방식을 사용해 해결하면 될 것으로 보인다
List<Integer> result = Stream.of(19,21,17).collect(Collectors.toList());
result.sort(Comparator.naturalOrder());
Intellij 에서 안내 해주는 것을 너무 신용하면 안될 것 같다.
끗
Author And Source
이 문제에 관하여(Java 16, Stream의 toList() 사용시 UnsupportedOperationException 이 발생했던 이야기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@chb1828/Java-16-Stream의-toList-사용시-UnsupportedOperationException-이-발생했던-이야기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)