为什么 collections.sort 在 Java 中按比较器排序时会引发不受支持的操作异常?

2022-09-01 04:17:22

以下是我的代码,用于按预定义的顺序对列表进行排序。已定义的顺序在项排序列表中提及。

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)

我不确定为什么这个列表是不可修改的。请帮帮我。


答案 1

该列表是不可修改的,显然您的客户端方法正在创建一个不可修改的列表(例如 等)。只需在排序之前创建一个可修改的列表:Collections#unmodifiableList

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

答案 2

推荐