170. Java Lambda 表达式 - 反转比较器:reversed() 方法
🎯 Comparator.reversed():快速反转排序顺序
有时你需要对一个对象列表进行排序,但排序顺序需要反转。Java 提供了 Comparator.reversed() 方法来轻松实现这一功能。
🚀 如何使用 reversed()?
假设我们已经有一个比较器,使用 Comparator.reversed() 可以快速生成一个按相反顺序排序的新比较器。
示例:反转字符串排序顺序
我们首先创建一个比较器,按字符串长度升序排序,如果长度相同,再按字母顺序排序:
List<String> strings = Arrays.asList("one", "two", "three", "four", "five");
Comparator<String> byLengthThenAlphabetically =
Comparator.comparing(String::length)
.thenComparing(Comparator.naturalOrder());
运行该代码时,字符串将按照长度升序排列,并在长度相同的情况下按字母顺序排序,输出:
[one, two, five, four, three]
反转排序顺序
现在,如果我们需要反转排序顺序(按降序排列),只需要调用 reversed() 方法:
strings.sort(byLengthThenAlphabetically.reversed());
System.out.println(strings);
🖨️ 输出结果:
[three, four, five, two, one]
解释:
- 字符串长度是排序的首要因素,长度更大的排在前面。
- 如果长度相同,则按字母顺序反向排列:
"three"排在"two"和"one"之前。
🛠️ 使用 List.sort() 与比较器
JDK 8 引入了 List.sort() 方法,它允许直接传入比较器,简化了排序操作。你可以通过 reversed() 反转排序顺序,像这样:
strings.sort(byLengthThenAlphabetically.reversed());
🎯 小结:reversed() 的作用
Comparator.reversed():返回一个新比较器,使排序顺序反转。- 常见场景:从升序改为降序排序,或反向字母顺序排序。
💡 拓展思考
你是否能想到其他使用 reversed() 的场景?例如,如何反转一个整数列表的排序顺序?试试编写代码实现。