Skip to content

Commit f4815a8

Browse files
author
曾梓健
committed
stream流的thenComparing使用和reversed理解
1 parent 7e60257 commit f4815a8

File tree

1 file changed

+82
-0
lines changed
  • myTest/src/main/java/com/hand/streamSort

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package com.hand.streamSort;
2+
3+
import java.util.ArrayList;
4+
import java.util.Comparator;
5+
import java.util.List;
6+
7+
/**
8+
* @author zijian.zeng@hand-china.com
9+
* @since 2023-02-09
10+
*/
11+
public class Stu {
12+
String name;
13+
int age;
14+
15+
public Stu(String name, int age) {
16+
this.name = name;
17+
this.age = age;
18+
}
19+
20+
public String getName() {
21+
return name;
22+
}
23+
24+
public int getAge() {
25+
return age;
26+
}
27+
28+
@Override
29+
public String toString() {
30+
return "Stu{" +
31+
"name='" + name + '\'' +
32+
", age=" + age +
33+
'}';
34+
}
35+
36+
public static void main(String[] args) {
37+
List<Stu> stul = new ArrayList<>();
38+
stul.add(new Stu("b", 19));
39+
stul.add(new Stu("c", 17));
40+
stul.add(new Stu("a", 19));
41+
stul.add(new Stu("d", 18));
42+
stul.add(new Stu("b", 17));
43+
stul.add(new Stu("a", 17));
44+
stul.add(new Stu("c", 19));
45+
stul.add(new Stu("c", 18));
46+
47+
48+
/**
49+
* 0 : 先把数据按照名称排序,再将排序结果按照年龄排序
50+
* 1 :先把数据按照名称排序,再在按照名称排序基础上,对相同名称的数据按照年龄排序
51+
*
52+
*/
53+
// System.out.println("-0-");
54+
// stul.stream().sorted(Comparator.comparing(Stu::getName)).sorted(Comparator.comparing(Stu::getAge))
55+
// .forEachOrdered(stu -> System.out.println("name:" + stu.getName() + ";age:" + stu.getAge()));
56+
// System.out.println("-1-");
57+
// stul.stream().sorted(Comparator.comparing(Stu::getName).thenComparing(Stu::getAge))
58+
// .forEachOrdered(stu -> System.out.println("name:" + stu.getName() + ";age:" + stu.getAge()));
59+
60+
System.out.println("-2-");
61+
stul.stream().sorted(Comparator.comparing(Stu::getAge).thenComparing(Stu::getName))
62+
.forEachOrdered(stu -> System.out.println("name:" + stu.getName() + ";age:" + stu.getAge()));
63+
64+
System.out.println("-3-");
65+
stul.stream().sorted(Comparator.comparing(Stu::getAge).thenComparing(Stu::getName).reversed())
66+
.forEachOrdered(stu -> System.out.println("name:" + stu.getName() + ";age:" + stu.getAge()));
67+
68+
System.out.println("-4-");
69+
stul.stream().sorted(Comparator.comparing(Stu::getAge).reversed().thenComparing(Stu::getName))
70+
.forEachOrdered(stu -> System.out.println("name:" + stu.getName() + ";age:" + stu.getAge()));
71+
72+
73+
/**
74+
* 这个例子深刻理解:reversed()作用:
75+
* 先age升,然后reversed,得到age降,第二个name升,再reversed(当前age降name升)得到age升name降;
76+
*/
77+
System.out.println("-5-");
78+
stul.stream().sorted(Comparator.comparing(Stu::getAge).reversed().thenComparing(Stu::getName).reversed())
79+
.forEachOrdered(stu -> System.out.println("name:" + stu.getName() + ";age:" + stu.getAge()));
80+
}
81+
}
82+

0 commit comments

Comments
 (0)