Java sort和sorted
时间: 2024-12-27 16:15:15 浏览: 39
### Java `sort` 和 `sorted` 方法的区别与使用场景
#### 一、`sort` 方法概述
`sort` 是用于对集合或数组进行排序的方法之一。对于 `java.util.Collections.sort()` 或者 `java.util.List<T>.sort(Comparator<? super T> c)`,这些方法会直接修改原集合的顺序[^2]。
示例如下:
```java
import java.util.*;
public class SortExample {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "orange", "banana");
// 对原始列表进行排序
Collections.sort(list);
System.out.println(list);
// 自定义比较器对原始列表进行排序
list.sort((a, b) -> b.compareTo(a));
System.out.println(list);
}
}
```
需要注意的是,在某些情况下使用 `Collections.sort()` 可能引发异常,比如当对象不是序列化类型时可能会抛出 `NotSerializableException` 错误[^3]。因此在这种情形下推荐采用其他替代方案如 `Arrays.sort()` 来规避潜在风险并手动设置列表值以防止调用 `listIterator` 方法带来的问题。
#### 二、`sorted` 方法概述
相比之下,`Stream.sorted()` 不改变源数据结构而是返回一个新的已排序流实例。此操作属于中间操作意味着它可以与其他流管道组合起来形成复杂的数据处理逻辑而不会立即执行直到遇到终端操作为止[^4]。
以下是利用 `Stream.sorted()` 实现多级排序的例子:
```java
import java.time.LocalDate;
import java.util.*;
import java.util.stream.Collectors;
class InterviewResultExcelDTO {
private String city;
private LocalDate interviewDate;
private LocalTime interviewTime;
// 构造函数、getter/setter省略...
}
public class SortedExample {
public static void main(String[] args) {
List<InterviewResultExcelDTO> interviewResultExcelDTOList = new ArrayList<>();
// 添加元素到列表中...
List<InterviewResultExcelDTO> sortedInterviewResultExcelDTOList =
interviewResultExcelDTOList.stream()
.sorted(
Comparator.comparing(InterviewResultExcelDTO::getCity)
.thenComparing(InterviewResultExcelDTO::getInterviewDate,
Comparator.nullsLast(Comparator.naturalOrder()))
.thenComparing(InterviewResultExcelDTO::getInterviewTime,
Comparator.nullsLast(Comparator.naturalOrder())))
.collect(Collectors.toList());
// 输出结果...
}
}
```
这种方法允许更灵活地构建复杂的排序条件链,并且由于其惰性求值特性能够更好地适应大规模数据集上的高效计算需求。
阅读全文
相关推荐


















