userList.stream().sorted((u1, u2) -> u2.getAge() – u1.getAge()); 怎么判断是升序还是降序?
- Android
- 10天前
- 12热度
- 0评论
如何判断 Java Stream API 中 sorted 方法的排序顺序?
在开发过程中,我们经常会使用 Java 的 Stream API 来对对象进行排序。例如:
userList.stream().sorted((u1, u2) -> u2.getAge() - u1.getAge());本文将详细介绍如何通过比较器(Comparator)来判断这段代码是否为升序或降序排列,并解释其中的原理。
一、Lambda 表达式的排序规则
在 Stream.sorted() 方法中,传入的是一个 Comparator<T> 对象。其返回值决定了对象的排列顺序:
(sorted, (o1, o2) -> {
if (o1 < o2) return -1; // 返回负数表示 o1 在 o2 前面
else if (o1 > o2) return 1; // 返回正数表示 o1 在 o2 后面
else return 0; // 返回 0 表示两者位置不变
});二、具体应用实例
减法版数字排序
对于数值类型的比较,我们可以简化为简单的减法操作:
升序排列
userList.stream().sorted((u1, u2) -> u1.getAge() - u2.getAge());上述代码中,o1 - o2 < 0 表示 u1 在 u2 前面;反之则在后面。因此,它是升序排列。
降序排列
userList.stream().sorted((u1, u2) -> u2.getAge() - u1.getAge());在这种情况下,o2 - o1 > 0 表示 u2 在 u1 前面。所以这是降序排列。
字符串排序
同样的原理也适用于字符串的比较:
升序排列(字母从小到大)
list.stream().sorted((s1, s2) -> s1.compareTo(s2));降序排列(字母从大到小)
list.stream().sorted((s1, s2) -> s2.compareTo(s1));总结
通过上述实例可以看出,判断 Stream.sorted() 方法中的排序顺序主要依赖于 lambda 表达式中比较器的编写规则。具体来说:
- 升序: 使用 o1 - o2 或 s1.compareTo(s2)。
- 降序: 使用 o2 - o1 或 s2.compareTo(s1)。
掌握这些基础可以大大提高对 Java Stream API 的理解和使用效率,尤其在处理复杂的数据排序场景时会非常有用。