在Java中番石榴的Lists.transform函数之后对List进行排序时,Collections.sort引发UnsupportedOperationException吗?

时间:2018-10-30 13:53:40

标签: java guava

我有一个使用番石榴的Lists.transform函数转换的列表。稍后,当我尝试使用Collections.sort()对列表进行排序时,我得到了UnsupportedOperationException

我的代码如下:

private List<SelectItemInfo> convertToSelectItemList(
        final List<String> dataOwnersOfActiveQualifiers)
    {

        final List<SelectItemInfo> dataOwnersSelectItemList = transform(dataOwnersOfActiveQualifiers,
            new Function<String, SelectItemInfo>()
            {
                public SelectItemInfo apply(final String input)
                {
                    final Employee employee = getLdapQuery().findEmployeesByIdOrLogin(input);
                    return new SelectItemInfo(input, employee.toStringNameSurname());
                }
            });
        Collections.sort(dataOwnersSelectItemList, this.comparator);
        return dataOwnersSelectItemList;
    }

我不确定为什么会出现此错误。

1 个答案:

答案 0 :(得分:2)

Collections.sort需要能够调用列表中的set并使其执行预期的操作。转换返回的列表不支持其set方法(这是“只读”列表)。

一个简单的解决方法是创建一个新列表并对其进行排序

List<SelectItemInfo> sortedCopy = new ArrayList(dataOwnersSelectItemList);
Collections.sort(sortedCopy, this.comparator);
// use sortedCopy

流是更好的解决方案