web-dev-qa-db-ja.com

Javaでコンパレーターによるソート中にcollections.sortがサポートされていない操作例外をスローするのはなぜですか?

以下は、事前定義された順序でリストをソートするために使用する私のコードです。定義された順序はitemsSortedリストに記載されています。

final List<String> itemsSorted = myMethod.getSortedItems();

List<String> plainItemList = myMethod2.getAllItems();

final Comparator<String> comparator = new Comparator<String>() {        

    public int compare(String str1, String str2) {
        return orderOf(str1) - orderOf(str2);
    }

    private int orderOf(String name) {          
        return ((itemsSorted)).indexOf(name);
    }
 };
 Collections.sort(plainItemList, comparator);
 return plainItemList;

上記のコードはスローします

Caused by: Java.lang.UnsupportedOperationException
    at Java.util.Collections$UnmodifiableList$1.set(Collections.Java:1244)
    at Java.util.Collections.sort(Collections.Java:221)

リストが変更できない理由がわかりません。これについて私を助けてください。

23
Poppy

リストは変更できません。明らかにクライアントメソッドが変更不可能なリストを作成しています(例:Collections#unmodifiableListなど)。並べ替える前に、変更可能なリストを作成するだけです。

List<String> modifiableList = new ArrayList<String>(unmodifiableList);
Collections.sort(modifiableList, comparator);
57
qqilihq