【问题标题】:How to sort a list without mutating it如何在不改变列表的情况下对列表进行排序
【发布时间】:2018-08-24 21:04:22
【问题描述】:

我想在 Java 中对 List 的项目进行排序,并让排序返回一个新的排序后的 List,而不改变原始的 List。有没有一个常用的库可以做到这一点?

【问题讨论】:

  • 所有 Java SE 集合类都有一个复制另一个集合的构造函数。使用它,你可以做List<Item> sortedList = new ArrayList<>(unsortedList); sortedList.sort(null);
  • 1) 复制它,对副本排序,或 2) stream() 它,对Stream 排序。也许 3) 创建一个排序的 view - 但那会有 O(lg n) 访问时间,所以可能没用。

标签: java sorting


【解决方案1】:

如果您使用的是 Java 8 或更高版本,则可以使用 Stream API。详情请见Sorting a list with stream.sorted() in Java

例如:

List<String> sortedList = myList.stream().sorted().collect(Collectors.toList());

【讨论】:

    【解决方案2】:

    这会将原始列表中的元素(通过引用)复制到新列表中。对一个列表的排序进行更改不会影响另一个。

    List<String> originalList = new ArrayList<String>();
    List<String> newList = new ArrayList(originalList);
    

    但请注意,如果您修改列表中的对象,则更改将反映在两个列表中,因为对象是通过引用复制的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-13
      • 2022-01-07
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 2020-08-28
      相关资源
      最近更新 更多