stream.sorted里o1-o2是正序还是倒序
时间: 2025-05-22 12:26:29 浏览: 26
在 Java 的 `Stream` API 中,当使用 `sorted()` 方法并提供自定义比较器 `(o1, o2) -> o1 - o2` 时,这种写法表示 **正序** 排序[^2]。具体来说:
- 如果返回值小于零,则认为第一个参数 (`o1`) 小于第二个参数 (`o2`);
- 如果返回值等于零,则认为两者相等;
- 如果返回值大于零,则认为第一个参数 (`o1`) 大于第二个参数 (`o2`)。
因此,在整数类型的场景下,`(o1, o2) -> o1 - o2` 表达式的语义是按升序排列数据。如果希望实现降序排列,则可以改用 `(o1, o2) -> o2 - o1` 或者通过调用 `Comparator.reverseOrder()` 来反转自然顺序[^3]。
以下是基于上述逻辑的一个简单代码示例来展示如何利用 Lambda 表达式完成列表中的元素排序操作:
```java
import java.util.*;
import java.util.stream.Collectors;
public class SortExample {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 3, 8, 1);
// 正序排序
List<Integer> ascendingSortedNumbers = numbers.stream()
.sorted((o1, o2) -> o1 - o2)
.collect(Collectors.toList());
System.out.println("正序:" + ascendingSortedNumbers);
// 倒序排序
List<Integer> descendingSortedNumbers = numbers.stream()
.sorted((o1, o2) -> o2 - o1)
.collect(Collectors.toList());
System.out.println("倒序:" + descendingSortedNumbers);
}
}
```
此程序会打印出两个版本的结果——分别对应着从小到大以及从大到小两种不同的排序形式。
阅读全文
相关推荐


















