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 我拿的都是工作项目有用到的,没有用到的就没写上来,后期有用到会继续补充 }
|