是什么是Stream流
java.util.stream.Stream
Stream流和传统的IO流,它们都叫流,却是两个完全不一样的概念和东西。
流可以简单的说是处理数据集合的东西,可以申明式流式API来处理集合,而不是写一个逻辑实现。
流分类
流分为顺序流及并行流,顺序流即每个指令按顺序执行,并行流即集合里面的操作并行执行。
List<Integer>numbers=Arrays.asList(1,2,3);// 顺序流numbers.stream().forEach(n->System.out.print(n));//并行流numbers.parallelStream().forEach(n->System.out.print(n));
以上例子,顺序流总是输出123
,而并行流则每次结果都不一定,并行流使用了ForkJoinPool分而治之,所以明白了ForkJoinPool原理的同学就知道并行流的真面目了。
创建流
1、调用集合的stream()方法或者parallelStream()方法。
2、Stream.of()方法,有针对int,long的专用流IntStream,LongStream。
使用流
以下举了流的一些常用的用法。
publicclassStreamTest{publicstaticvoidmain(String[]args){System.out.println("过滤-找出年纪大于18岁的人");List<User>list=initList();list.stream().filter((Useruser)->user.getAge()>18).collect(Collectors.toList()).forEach(System.out::println);System.out.println();System.out.println("最大值-找出最大年纪的人");list=initList();Optional<User>max=list.stream().max((u1,u2)->u1.getAge()-u2.getAge());System.out.println(max.get());System.out.println();System.out.println("映射-规纳-求所有人的年纪总和");list=initList();Optional<Integer>reduce=list.stream().map(User::getAge).reduce(Integer::sum);System.out.println(reduce.get());System.out.println();System.out.println("分组-按年纪分组");list=initList();Map<Integer,List<User>>userMap=list.stream().collect(Collectors.groupingBy(User::getAge));MapUtils.verbosePrint(System.out,null,userMap);System.out.println();System.out.println("创建-去重-统计");Stream<User>userStream=Stream.of(newUser("u1",1),newUser("u2",21),newUser("u2",21));System.out.println(userStream.distinct().count());System.out.println();}publicstaticList<User>initList(){List<User>list=newArrayList<>();list.add(newUser("oaby",23));list.add(newUser("tom",11));list.add(newUser("john",16));list.add(newUser("jennis",26));list.add(newUser("tin",26));list.add(newUser("army",26));list.add(newUser("mack",19));list.add(newUser("jobs",65));list.add(newUser("jordan",23));returnlist;}}
输出结果:
过滤-找出年纪大于18岁的人User[username=oaby,age=23]User[username=jennis,age=26]User[username=tin,age=26]User[username=army,age=26]User[username=mack,age=19]User[username=jobs,age=65]User[username=jordan,age=23]最大值-找出最大年纪的人User[username=jobs,age=65]映射-规纳-求所有人的年纪总和235分组-按年纪分组{16=[User[username=john,age=16]]65=[User[username=jobs,age=65]]19=[User[username=mack,age=19]]23=[User[username=oaby,age=23],User[username=jordan,age=23]]26=[User[username=jennis,age=26],User[username=tin,age=26],User[username=army,age=26]]11=[User[username=tom,age=11]]}创建-去重-统计2
可以看出流操作数据集合很强大吧,但需要注意的是流只能执行一次,再次使用需要重要打开。
更多的玩法可以自己去研究吧。
推荐书籍
Spring Cloud微服务实战
JavaEE开发的颠覆者 Spring Boot实战
SpringBoot揭秘 快速构建微服务体系
SpringBoot实战
精通Spring+4.x++企业应用开发实战
获取所有高清电子书下载请到274435854群。
看完有没有收获?分享到朋友圈给更多的人吧。
架构之路,头条精选,每天一篇干货,喜欢就收藏+关注吧!
本文暂时没有评论,来添加一个吧(●'◡'●)