私は次のコードとJava 8を使用して何の問題もなく、ユーザのリストを並べ替えることができます。なぜCollections.sort(List)はJava 8で動作しますか?CopyOnWriteArrayListでは動作しますが、Java 7では動作しません。
CopyOnWriteArrayList<User> allCurrentLoginnedUsersList = new CopyOnWriteArrayList<>();
Collections.sort(allCurrentLoginnedUsersList);
は今、私は、Java 7に変更し、私は日食に何のエラーを見ませんでした。しかし今、Java 7で実行すると、私はこのエラーを受け取ります:
java.lang.UnsupportedOperationException
at java.util.concurrent.CopyOnWriteArrayList$COWIterator.set(CopyOnWriteArrayList.java:1049)
at java.util.Collections.sort(Collections.java:221)
at com.fluent.User.sortAllCurrentLoginnedUsers(User.java:446)
これを修正するには?
それはないです。それ
sort
方法は(まだUnsupportedOperationException
で失敗しList.listIterator()
を使用して、すなわち)以前の動作のようですが、CopyOnWriteArrayList
が明示的にIterator
を使用していない別のバージョンを提供するデフォルトの実装'Collections.sort'はJava 8の実装を変更しました:) – TunakiStrange。 Java 8のソースコードの私のバージョンでは、その変更は見られません。多分古すぎるかもしれません。私のバージョン(1.8.0-b132)では、List.sort()はCollections.sort()を呼び出します。 –
ああ、それは確かに変です。[Grepcode](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/Collections.java#Collections.sort%28java.util.List% 2Cjava.util.Comparator%29)は変更を示しています。 – Tunaki