170. Java Lambda 表达式 - 反转比较器:reversed() 方法

73 阅读1分钟

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() 的场景?例如,如何反转一个整数列表的排序顺序?试试编写代码实现。