一、先看你这句代码
java
运行
sorted((u1, u2) -> u2.getAge() - u1.getAge());
一眼判定:年龄降序(大的在前,小的在后)
二、底层原理:Comparator 比较规则(核心)
sorted() 里面的 Lambda 就是 Comparator.compare(o1,o2)格式固定:
java
运行
(o1, o2) -> 【返回值】
返回值规则只有三句,背这三句就够:
- 返回负数:
o1排在o2前面 - 返回 0:两者位置不变
- 返回正数:
o1排在o2后面
三、最简单万能口诀(必背)
口诀 1:减法版数字排序
java
运行
(o1, o2) -> o1 - o2
o1 - o2 = 升序(从小到大)
java
运行
(o1, o2) -> o2 - o1
o2 - o1 = 降序(从大到小)
结论:前面减后面 = 升序 后面减前面 = 降序
四、套到你的 User 年龄上拆解
你的代码:
java
运行
(u1, u2) -> u2.getAge() - u1.getAge()
u1:第一个对象u2:第二个对象- 年龄:
u2年龄 - u1年龄
属于 后面减前面→ 降序
举个例子:u1 年龄 = 20,u2 年龄 = 25
java
运行
25 - 20 = 正数
返回正数 → 根据规则:o1 排在后面也就是 25 在前,20 在后 → 大的在前 = 降序
五、全部对比一眼看懂
1)年龄升序(从小到大)
java
运行
sorted((u1, u2) -> u1.getAge() - u2.getAge());
前 - 后 = 升序
2)年龄降序(从大到小)
java
运行
sorted((u1, u2) -> u2.getAge() - u1.getAge());
后 - 前 = 降序
六、最通俗大白话解释(完全不用记原理)
- **
u1 - u2**你自己减自己后面的 → 从小到大 升序 - **
u2 - u1**后面的减你自己 → 从大到小 降序
七、再给你扩展到字符串、通用写法
不光数字年龄,所有都适用:
1、升序(字母从小到大)
java
运行
sorted((s1,s2)->s1.compareTo(s2))
2、降序(字母从大到小)
java
运行
sorted((s1,s2)->s2.compareTo(s1))
八、终极总结(你以后直接套用)
o1 - o2= 升序o2 - o1= 降序- 只要看到后面参数减前面参数,一律降序
- 只要看到前面减后面,一律升序