Java 16がStream上でtoList()を使用する場合に発生するUnsupported OperationException
Java 16には、Streamでリストを簡単に作成できるtoList()が存在する.でも私のように勝手に使うと、問題が発生します...
問題が発生した場合は以下の通りです.
その結果、次のようなエラーが発生しました.
toList()関数内部は以下のようになります.
にこにこ
問題が発生した場合は以下の通りです.
List<Integer> result = Stream.of(19,21,17).toList();
result.sort(Comparator.naturalOrder());
以前はStreamのcollects.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を使用してunmodifibleList()で変更できないためです.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の誘導はあまり信じられないと思います.にこにこ
Reference
この問題について(Java 16がStream上でtoList()を使用する場合に発生するUnsupported OperationException), 我々は、より多くの情報をここで見つけました https://velog.io/@chb1828/Java-16-Stream의-toList-사용시-UnsupportedOperationException-이-발생했던-이야기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol