Java8新特性: Stream中常用API
2021/6/5 14:22:31
本文主要是介绍Java8新特性: Stream中常用API,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
Stream(流)
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
生成流
在 Java 8 中, 集合接口有两个方法来生成流:
- stream() − 为集合创建串行流。
- parallelStream() − 为集合创建并行流。
List<Integer> integerList = Arrays.asList(22, 36, 50, 62, 18); List<Integer> notNullList = integerList.stream().filter(Objects::nonNull).collect(Collectors.toList());
forEach
Stream 提供了新的方法 ‘forEach’ 来迭代流中的每个数据
List<Integer> integerList = Arrays.asList(22, 36, 50, 62, 18); integerList.forEach(System.out::println);
collect(收集)
collect,收集,可以说是内容最繁多、功能最丰富的部分了。从字面上去理解,就是把一个流收集起来,最终可以是收集成一个值也可以收集成一个新的集合。
过滤/拼接(filter/joining)
List<Teacher> teacherList = new ArrayList<>(); teacherList.add(new Teacher("张磊",22,"zl")); teacherList.add(new Teacher("李鹏",36,"lp")); teacherList.add(new Teacher("刘敏",50,"lm")); teacherList.add(new Teacher("宋亚楠",62,"syn")); teacherList.add(new Teacher("彩彬",18,"cb")); //filter 过滤 List<Teacher> list = teacherList.stream().filter(x -> x.getAge() > 30).collect(Collectors.toList()); //joining拼接 所有老师姓名拼接成字符串 String nameJoin = teacherList.stream().map(Teacher::getName).collect(Collectors.joining(",")); System.out.println(nameJoin); System.out.println(list);
输出结果
[Teacher(name=李鹏, age=36, nikeName=lp), Teacher(name=刘敏, age=50, nikeName=lm), Teacher(name=宋亚楠, age=62, nikeName=syn)] 张磊,李鹏,刘敏,宋亚楠,彩彬
聚合(count/max)
统计集合中元素个数和最大值
//max最大值 获取年龄最大的老师 Optional<Teacher> teacherOptional = teacherList.stream().max(Comparator.comparing(Teacher::getAge)); System.out.println(teacherOptional); //count(统计) 统计年龄大于30岁的老师人数 long count = teacherList.stream().filter(o -> o.getAge() > 30).count(); System.out.println(count);
输出结果
Optional[Teacher(name=宋亚楠, age=62, nikeName=syn)] 3
提取(limit/skip/distinct)
Stream还可以对集合中元素选着性提取和去重
List<String> stringList = Arrays.asList("A", "B", "C", "D", "E", "E", "F"); //limit 前n个 List<String> limitList = stringList.stream().limit(2).collect(Collectors.toList()); System.out.println("limit: "+limitList); //skip 跳过前n个 List<String> skipList = stringList.stream().skip(2).collect(Collectors.toList()); System.out.println("skip: "+skipList); //distinct 去重 List<String> distinctList = stringList.stream().distinct().collect(Collectors.toList()); System.out.println("distinct: "+distinctList);
输出结果
limit: [A, B] skip: [C, D, E, E, F] distinct: [A, B, C, D, E, F]
统计(count/max/sum)
计算集合中元素的个数,最大值,求和
List<Integer> integerList = Arrays.asList(22, 36, 50, 62, 18); //count 统计 long count = integerList.stream().filter(i -> i>20).count(); System.out.println("统计: "+count); //averagingDouble 平均值 Double averAge = integerList.stream().collect(Collectors.averagingDouble(Integer::intValue)); System.out.println("平均值: "+averAge); //sum 求和 int sum = integerList.stream().mapToInt(Integer::intValue).sum(); System.out.println("求和: " + sum); //summarizingDouble 统计所有信息 DoubleSummaryStatistics doubleSummaryStatistics = integerList.stream().collect(Collectors.summarizingDouble(Integer::intValue)); System.out.println("统计所有信息: "+doubleSummaryStatistics);
输出结果
统计: 4 平均值: 37.6 求和: 188 统计所有信息: DoubleSummaryStatistics{count=5, sum=188.000000, min=18.000000, average=37.600000, max=62.000000}
Stream官方文档: 地址
这篇关于Java8新特性: Stream中常用API的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程
- 2024-11-26Springboot单体架构搭建资料详解与实战教程
- 2024-11-26Springboot框架资料:新手入门教程
- 2024-11-26Springboot企业级开发资料入门教程
- 2024-11-26SpringBoot企业级开发资料详解与实战教程
- 2024-11-26Springboot微服务资料:新手入门全攻略