Java:对不可修改的列表进行排序

Lis*_*sta 20 java sorting collections list

怎么会这样做?

我已经尝试创建一个新的空列表,然后将不可修改的列表元素复制到它,但我得到了不支持的操作错误.

任何帮助表示赞赏.

Kev*_*ion 40

FWIW,谷歌收藏,它是一个单行:

List<Foo> sorted = Ordering.natural().sortedCopy(unmodifiableList);
Run Code Online (Sandbox Code Playgroud)

  • 看起来像广告...我喜欢它. (2认同)

Boz*_*zho 37

    List unmodifiableList = Collections.unmodifiableList(list);

    List newList = new ArrayList(unmodifiableList);

    Collections.sort(newList);
Run Code Online (Sandbox Code Playgroud)

ArrayList获取现有列表的构造函数,读取其元素(不修改它们!),并将它们添加到新列表中.


Mr.*_* 安宇 21

你在用Collections.emptyList()?创建一个空列表?如果是这样,那也是一个不可修改的列表,这可能是您问题的根源.

使用List实现的构造函数创建新列表,例如new ArrayList().您可以将原始列表传递给构造函数,也可以使用该addAll()方法.


Sou*_*man 13

在Java 8中,您可以使用流API.例如:

List<?> sortedList = unsortedList.stream().sorted().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)