Stream流

场景 –> 当我查询出数据需要按照类型来进行分组
首先我们创建需要用到的类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// 实体类  @Data注解来自 lombok 插件 --> 自行百度
@Data
public class Person{
// 编号
private String id;
// 名称
private String name;
// 性别
private String sex;
// 部门
private String dept;
}

// mian方法, 来自java 入门编程 --> Hello World
public static void main(String[] args){
// 0.介绍第一种场景
List<Person> persons=new ArrayList<>();
Person p1=new Person();
p1.setId("1");
p1.setName("person1");
p1.setSex("男");
p1.setDept("宣传部");
persons.add(person1);

Person p2=new Person();
p2.setId("2");
p2.setName("person2");
p2.setSex("女");
p2.setDept("人事部");
persons.add(person2);

Person p3=new Person();
p3.setId("3");
p3.setName("person3");
p3.setSex("妖");
p3.setDept("开发部");
persons.add(person3);

// 1.我们想取出全部的名称写到一个集合里面
List<String> names = persons.stream().map(Person::getName).collect(Collectors.toList());


// 2.有一次我遇见一个场景,就是需要遍历一个对象,然后拿到对象的id去查别的数据
// 可能在以前我就是循环遍历 然后在循环里面调查询接口,但是这样不好
// 所以我把数据全部都先查出来,然后用id作为key,这样在循环中只需要拿id去map里面取数据就行
// 首先这个其实就是将List转为map,但是我们都知道map肯定要有key 和 值 键值对吧
// 所以Collectors.toMap( key , value); 方法的入参也很简单就是一个key 一个值
// Person::getId这其实就是lambd表达式, Function.identity(); 其实这个方法返回就是对象本身
Map<String,Person> personMap = person.stream().collect(Collectors.toMap(Person::getId,Function.identity()));
// 当然Collectors.toMap(key,value); 根据你的需求来转你需要的集合
// 你也可以直接用id作为key name作为value
Map<String,String> personMap = person.stream().collect(Collectors.toMap(Person::getId,Person::getName));

// 3.你还能使用stream来给数据分组
Map<String,List<Person>> sexs = persons.stream().collect(Collectors.groupingBy(Person::getSex));

// 当然还能给集合去重 .distinct()
List<String> names = persons.stream().map(Person::getName).distinct().collect(Collectors.toList());


//TODO 我拿的都是工作项目有用到的,没有用到的就没写上来,后期有用到会继续补充
}