当前位置: 首页 > news >正文

Java Stream流式编程

  为了方便演示流的各种操作,这里数据统一用如下的 arr 集合

List<Integer> arr = Arrays.asList(5, 4, 3, 6, 6, 9, 8, 7, 1, 2);

1.forEach 遍历

函数原型:void forEach(Consumer<? super T> action)

描述:遍历所有元素,并执行相应操作

如:遍历所有元素 并打印

arr.stream().forEach( e -> {System.out.println(e); });

2.filter 过滤

函数原型:Stream<T> filter(Predicate<? super T> predicate)

描述:用参数(函数式接口,可以用lambda表达式)指定一个过滤条件,将过滤之后的数据放到一个新的Stream流中

如:利用filter将 大于等于5 的数据过滤出来,收集到list集合中

List<Integer> res = arr.stream().filter(e -> e >= 5).toList();

3.distinct 元素去重

函数原型:Stream<T> distinct()

描述:去除重复数据,将去重后的数据放到一个新的Stream流中

如:利用distinct对元素进行 去重,收集到list集合中

List<Integer> res = arr.stream().distinct().toList();

4.sorted 排序

函数原型:Stream<T> sorted(Comparator<? super T> comparator)

描述:根据指定的比较方式,对元素进行排序

如:对流中的元素进行 从小到大 排序,排序后的结果收集到list集合中

List<Integer> res = arr.stream().sorted((a, b) -> a - b).toList();

5.max 与 min

函数原型:Optional<T> max(Comparator<? super T> comparator)

                  Optional<T> min(Comparator<? super T> comparator)

描述:根据指定的比较方式,拿到最大值或最小值封装到Optional对象中

如:利用max与min获取最大值,最小值

Integer max = arr.stream().max((a, b) -> a - b).get();
Integer min = arr.stream().min((a, b) -> a - b).get();

6.skip 跳过前几个

函数原型:Stream<T> skip(long n)

描述:跳过流中的前几个数据,将剩下的数据放到一个新的Stream流中

如:利用skip 跳过前3个元素,将剩余的元素放到list集合中

List<Integer> res = arr.stream().skip(3).toList();

7.limit 长度限制

函数原型:Stream<T> limit(long maxSize)

描述:从流中取出元素的个数不能超过maxSize

如:从流中 取出前五个元素

List<Integer> res = arr.stream().limit(5).toList();

8.collect 收集

函数原型:<R, A> R collect(Collector<? super T, A, R> collector)

描述:将流中的元素收集到指定类型的集合中(可以通过Collectors类中的静态方法指定,如toSet(),toList()等)

如:将流中的元素 收集到Set 集合中

Set<Integer> res = arr.stream().collect(Collectors.toSet());

9.map 数据映射

函数原型:<R> Stream<R> map(Function<? super T, ? extends R> mapper)

描述:对流中的每一个元素进行数据映射,将映射后的数据放到一个新的Stream流中

如:利用map进行将数据类型进行映射,将所有的数据都 映射为String 类型

List<String> res = arr.stream().map(e -> String.valueOf(e)).toList();

10.条件判断

① allMatch 全满足

函数原型:boolean allMatch(Predicate<? super T> predicate)

描述:判断所有的元素是否都满足指定条件

如:判断所有的元素 是否都大于5

if (arr.stream().allMatch(e -> e > 5)){System.out.println("所有元素都大于5");
}

② anyMatch 存在一个满足

函数原型:boolean anyMatch(Predicate<? super T> predicate)

描述:流中的所有元素,只要存在一个满足条件的,则返回true

如:判断 是否存在大于100 的元素

if (arr.stream().anyMatch(e -> e > 100)) {System.out.println("存在元素大于100");
}

③ noneMatch 都不满足

函数原型:boolean noneMatch(Predicate<? super T> predicate)

描述:如果所有元素都不满足条件,则返回true

如:判断所有元素 是否都不小于0

if (arr.stream().noneMatch(e -> e < 0)) {System.out.println("arr中的元素都不小于0");
}

11.reduce 合并元素

函数原型:Optional<T> reduce(BinaryOperator<T> accumulator)

描述:通过指定的操作对元素进行合并(如相加)

如:将所有的元素进行 相加,获取相加后的结果

Integer sum = arr.stream().reduce((a, b) -> a + b).get();

12.dropWhile 一直删除

函数原型:Stream<T> dropWhile(Predicate<? super T> predicate)

描述:指定一个条件,遇到第一个不满足条件的元素之前一直删除

如:删除前面 连续小于3的前缀

List<Integer> res = arr.stream().dropWhile(e -> e < 3).collect(Collectors.toList());

13.takeWhile 拿出

函数原型:Stream<T> takeWhile(Predicate<? super T> predicate)

描述:指定一个条件,遇到第一个不满足条件的元素之前一直取出

如:取出 连续大于3的前缀

List<Integer> res = arr.stream().takeWhile(e -> e > 3).collect(Collectors.toList());

14.flatMap 将流压平

函数原型:<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)

描述:指定一个操作元素函数(该函数会遍历所有元素),返回操作后的结果流

如:将二维数组转为一维数组,将 许多流压成一个流

Integer[][]arr2D = {{1,1,1},{2,2,2},{3,3,3}
};//  [1, 1, 1, 2, 2, 2, 3, 3, 3]
Object[] res = Arrays.stream(arr2D).flatMap(a -> Arrays.stream(a)).toArray();   

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 小程序自定义组件配合插槽和组件传值
  • 重生之我们在ES顶端相遇第11 章 - 深入自定义语言分词器
  • centos 系统yum 安装 mariadb
  • 书生大模型实战营基础(3)——LangGPT结构化提示词编写实践
  • C#基础(2)枚举
  • Linux系统安装MySQL8.0
  • ES6更新的内容中什么是proxy
  • 力扣8.29
  • React多功能管理平台项目开发全教程
  • C++ | Leetcode C++题解之第387题字符串中的第一个唯一字符
  • Go入门:gin框架极速搭建图书管理系统
  • MySQL:复合查询
  • 深度学习(二)
  • minio最新源码编译(处理安全扫描中跨域访问、.js.map等不安全问题)
  • SQLite3 数据类型深入全面讲解
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 分享的文章《人生如棋》
  • @jsonView过滤属性
  • “大数据应用场景”之隔壁老王(连载四)
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Create React App 使用
  • Django 博客开发教程 16 - 统计文章阅读量
  • express + mock 让前后台并行开发
  • github从入门到放弃(1)
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Meteor的表单提交:Form
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • python3 使用 asyncio 代替线程
  • Redash本地开发环境搭建
  • SegmentFault 2015 Top Rank
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Web Storage相关
  • 从重复到重用
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 目录与文件属性:编写ls
  • -- 数据结构 顺序表 --Java
  • 微信开放平台全网发布【失败】的几点排查方法
  • 用jQuery怎么做到前后端分离
  • kubernetes资源对象--ingress
  • 阿里云ACE认证之理解CDN技术
  • 阿里云API、SDK和CLI应用实践方案
  • ​ArcGIS Pro 如何批量删除字段
  • #window11设置系统变量#
  • #微信小程序:微信小程序常见的配置传旨
  • $ git push -u origin master 推送到远程库出错
  • (0)Nginx 功能特性
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (LLM) 很笨
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • *上位机的定义