userList.stream().sorted((u1, u2) -> u2.getAge() - u1.getAge()); 怎么判断是升序还是降序?

一、先看你这句代码

java

运行

scss 复制代码
sorted((u1, u2) -> u2.getAge() - u1.getAge());

一眼判定:年龄降序(大的在前,小的在后)

二、底层原理:Comparator 比较规则(核心)

sorted() 里面的 Lambda 就是 Comparator.compare(o1,o2)格式固定:

java

运行

rust 复制代码
(o1, o2) -> 【返回值】

返回值规则只有三句,背这三句就够

  1. 返回负数o1 排在 o2 前面
  2. 返回 0:两者位置不变
  3. 返回正数o1 排在 o2 后面

三、最简单万能口诀(必背)

口诀 1:减法版数字排序

java

运行

rust 复制代码
(o1, o2) -> o1 - o2

o1 - o2 = 升序(从小到大)


java

运行

rust 复制代码
(o1, o2) -> o2 - o1

o2 - o1 = 降序(从大到小)

结论:前面减后面 = 升序 后面减前面 = 降序

四、套到你的 User 年龄上拆解

你的代码:

java

运行

scss 复制代码
(u1, u2) -> u2.getAge() - u1.getAge()
  • u1:第一个对象
  • u2:第二个对象
  • 年龄:u2年龄 - u1年龄

属于 后面减前面降序

举个例子:u1 年龄 = 20,u2 年龄 = 25

java

运行

ini 复制代码
25 - 20 = 正数

返回正数 → 根据规则:o1 排在后面 也就是 25 在前,20 在后 → 大的在前 = 降序

五、全部对比一眼看懂

1)年龄升序(从小到大)

java

运行

scss 复制代码
sorted((u1, u2) -> u1.getAge() - u2.getAge());

前 - 后 = 升序

2)年龄降序(从大到小)

java

运行

scss 复制代码
sorted((u1, u2) -> u2.getAge() - u1.getAge());

后 - 前 = 降序

六、最通俗大白话解释(完全不用记原理)

  1. **u1 - u2**你自己减自己后面的 → 从小到大 升序
  2. **u2 - u1**后面的减你自己 → 从大到小 降序

七、再给你扩展到字符串、通用写法

不光数字年龄,所有都适用:

1、升序(字母从小到大)

java

运行

scss 复制代码
sorted((s1,s2)->s1.compareTo(s2))

2、降序(字母从大到小)

java

运行

scss 复制代码
sorted((s1,s2)->s2.compareTo(s1))

八、终极总结(你以后直接套用)

  1. o1 - o2 = 升序
  2. o2 - o1 = 降序
  3. 只要看到后面参数减前面参数 ,一律降序
  4. 只要看到前面减后面 ,一律升序
相关推荐
用户4682557459136 分钟前
Testcontainers 在 Windows Docker Desktop 上跑不通:协议层不兼容 + 4 种可行环境
java·后端
程序员小羊!27 分钟前
12.Java 多线程编程
java·开发语言
xuhaoyu_cpp_java33 分钟前
项目学习(三)代码生成器
java·经验分享·笔记·学习
乐观勇敢坚强的老彭34 分钟前
C++信息学奥赛lesson1
java·开发语言·c++
San813_LDD38 分钟前
[深度学习] 数据序列化格式对比:以日志级别配置为例
xml·java·前端
github_czy43 分钟前
更加优雅的类型检查与传参---mcp源码分析
java·服务器·开发语言
专注_每天进步一点点1 小时前
IDEA中,Apifox Helper 的 2.0.15-243版本的插件 导出指定的接口,入参的中文名为空,描述为空
java·ide·intellij-idea
兰令水1 小时前
leecodecode【区间DP+树形DP】【2026.6.10打卡-java版本】
java·算法·leetcode
小刘|1 小时前
Spring WebFlux + AI 流式输出深度解析:Spring AI 与 LangChain4j 效果差异溯源
java·后端·spring
Arvin.Angela1 小时前
Maven 的基本配置操作
java·maven