Java中stream 排序
时间: 2025-05-22 07:08:25 浏览: 11
在Java中,`Stream` API 提供了非常强大的功能来进行集合数据的操作。其中排序是一个常用的需求,可以借助 `sorted()` 方法对流中的元素进行排序。
### 使用 `sorted()` 进行自然顺序排序
如果你希望按照对象的自然顺序(如数字从小到大、字符串按字典序等),可以直接调用无参版本的 `sorted()`:
```java
List<Integer> numbers = Arrays.asList(5, 3, 8, 6);
numbers.stream()
.sorted() // 按照自然顺序排序
.forEach(System.out::println); // 输出结果:3, 5, 6, 8
```
如果列表中的元素实现了 `Comparable` 接口,则会根据该接口定义的方式进行比较并完成排序操作。
### 自定义排序规则 - Comparator
当需要自定义排序逻辑时,你可以通过传递一个 `Comparator` 给 `sorted()` 方法来实现特定需求。比如我们想要降序排列整数列表:
```java
List<Integer> numbers = Arrays.asList(5, 3, 8, 6);
numbers.stream()
.sorted((a, b) -> b - a) // 定义降序
.forEach(System.out::println); // 输出结果:8, 6, 5, 3
```
这里 `(a, b) -> b - a` 就是我们提供的比较器实例,它指定了如何对比两个值,并返回相应的大小关系。
#### 对复杂对象排序示例
假设有一个包含员工信息的对象类Employee,并且我们要基于他们的工资水平从高到底排序:
```java
class Employee {
String name;
int salary;
public Employee(String name, int salary){
this.name = name;
this.salary = salary;
}
@Override
public String toString(){
return "Name:" +name+ ", Salary:"+salary;
}
}
// 创建一些雇员对象放入list
List<Employee> employees = new ArrayList<>();
employees.add(new Employee("Alice", 7000));
employees.add(new Employee("Bob", 5400));
// 根据薪水高低排序
employees.stream().sorted( (e1,e2)->Integer.compare(e2.getSalary(), e1.getSalary()) )
.forEach(System.out::println);
```
上述代码段将首先创建若干个 `Employee` 实例并将它们存入列表当中;接着利用 Stream 流式处理技术对该表单内所有成员依照薪资额度由多寡递减序列加以重组后再打印出来每个职工的信息详情内容。
阅读全文
相关推荐


















