stream流——续
Stream流引入
Lambda表达式,基于Lambda所带来的函数式编程,又引入了一个全新的Stream概念,用于解决集合类库。
测试的实体实例
List<User> listUser = new ArrayList<>();
listUser.add(new User().setId(1).setName("张三").setAge(18));
listUser.add(new User().setId(2).setName("李四").setAge(25));
listUser.add(new User().setId(3).setName("王五").setAge(25));
listUser.add(new User().setId(3).setName("马六").setAge(31));
1. 这种是将List集合根据某个类型进行分组:
list.collect(Collectors.groupingBy(User::getAge));
流也可以实现在分组之后进行每组数据的统计:
list.collect(Collectors.groupingBy(User::getAge,Collectors.counting())));
流也可以实现在分组之后进行每组数据的求和:
list.collect(Collectors.groupingBy(User::getAge,Collectors.summarizingInt(User::getAge))));
4. stream流也可以实现在分组之后的数据进行二次处理操作只获取需要的数据:
list.collect(Collectors.groupingBy(User::getAge,Collectors.mapping(User::getName, Collectors.toSet())));
总结
上述问题中,还可以延伸到在分组之前对数据进行filter过滤进处理无用数据,也可以在分组之后进行其他求值操作并不限于求和,以及统计。上述的方法能极大的提升代码的运行速度,例如:当你需要对一个list集合进行其他数据库查询处理的时候,可以一次性查询到list需要的所有数据,然后通过分组进行数据处理,就能极大的减少项目与数据库之间的通讯从而提高运行速度