3分钟,学会一个 Lambda 小知识之【流API】

ops/2024/9/19 12:57:57/ 标签: windows, 软件测试

之前给大家介绍的 Lambda 小知识还记得吗?今天再来给大家介绍, 流API 的相关知识要点。 

流API

Stream是Java8中处理集合的关键抽象概念,它可以指定你对集合的,可以执行查找、过滤和映射等数据操作。

Stream 使用一种类似用 SQL 语句从数据库查询数据的显示方式提供一种对 Java 集合和来表达的高阶抽象。

(Stream)是流?

数据通道,是一个来自数据源的元素并支持聚合操作。

注意:

  • 流自己不会存储元素。

  • 流不会改变源对象。相反,他们会返回一个携带结果的新流。

  • Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。

操作流的三个步骤
  • 创建流

  • 中间操作

  • 开始操作

图片

创建流

  1. //集合

  2. List<String> list = new ArrayList<>();

  3. Stream<String> stream = list.stream();

  4. //数组

  5. IntStream stream = Arrays.stream(new int[10]);

  6. //Stream静态方法

  7. Stream<String> a = Stream.of("a", "2", "3");

  8. //创建无限流

  9. Stream<Integer> iterate = Stream.iterate(0, (x) -> x + 2);

流中间操作

一条溪流可以有多个中间操作,形成一条水线,连续执行一条婴儿流操作。

1、过滤器(谓词p)

接收 Lambda ,从流中某些元素

  1. Stream<String> stream = Stream.of("abc", "122", "lemon","haha");

  2. stream = stream.filter((e)->{

  3. System.out.println("filter中间操作");

  4. return e.length() > 3;

  5. });

  6. stream.forEach(System.out::println);

2、区别()

筛选,通过流所生成元素的 hashCode() 和 equals() 消除重复元素​​​​​​​

  1. Stream<String> stream = Stream.of("abc","abc", "122", "lemon","haha","abc");

  2. stream = stream.distinct();

  3. stream.forEach(System.out::println);

3、限制

断流数量,使元素不超过给定。​​​​​​​

  1. Stream<String> stream = Stream.of("abc","abc", "122", "lemon","haha","abc");

  2. stream = stream.distinct().limit(2);

  3. stream.forEach(System.out::println);

4、skip(long n)

跳过元素,跳过前N个元素,与limit(n)互补​​​​​​​

  1. Stream<String> stream = Stream.of("abc","abc", "122", "lemon","haha","abc");

  2. stream = stream.skip(2);

  3. stream.forEach(System.out::println);

5、地图(功能f)

接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。​​​​​​​

  1. Stream<String> stream = Stream.of("abc","abc", "122", "lemon","haha","abc");

  2. stream = stream.map((e) -> e.toUpperCase());

  3. stream.forEach(System.out::println);

6、flatMap(函数f)

接收一个函数参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流​​​​​​​

  1. Stream<String> stream = Stream.of("abc","abc", "122", "lemon","haha","abc");

  2. stream.flatMap((e) -> {

  3. String[] split = e.split("");

  4. return Stream.of(split);

  5. }).forEach(System.out::println);

7、排序()

产生一个新流,其中自然按顺序示例。​​​​​​​

  1. Stream<String> stream = Stream.of("abc","abc", "122", "lemon","haha","abc");

  2. stream.sorted().forEach(System.out::println);

8、排序(Comparator comp)

产生一个新的,其中按比较器顺序流(定制示例)​​​​​​​

  1. Stream<String> stream = Stream.of("abc","abc", "122", "lemon","haha","abc");

  2. stream.sorted(Comparator.comparingInt(String::length)).forEach(System.out::println);

Stream的终止操作
1、计数()

返回流中元素总数​​​​​​​

  1. Stream<String> stream = Stream.of("abc","abc", "122", "lemon","haha","abc");

  2. long count = stream.sorted(Comparator.comparingInt(String::length)).count();

  3. System.out.println(count);

2、max(比较器c)

返回流中等级​​​​​​​

  1. Stream<String> stream = Stream.of("123","1234", "12345", "123456","1234567","aaaaaaaaaa");

  2. Optional<String> max = stream.max(Comparator.comparingInt(String::length));

  3. System.out.println(max.get());

3、min(比较器c)

返回流中电话​​​​​​​

  1. Stream<String> stream = Stream.of("123","1234", "12345", "123456","1234567","aaaaaaaaaa");

  2. Optional<String> min = stream.min(Comparator.comparingInt(String::length));

  3. System.out.println(min.get());

4、forEach(消费者c)

内部的​​​​​​​

  1. Stream<String> stream = Stream.of("123","1234", "12345", "123456","1234567","aaaaaaaaaa");

  2. stream.forEach(System.out::println);

5、reduce(T iden, BinaryOperator b)

将流中元素结合起来,得到一个值,返回T​​​​​​​

  1. Stream<Integer> stream = Stream.of(1,2,3,4,5);

  2. int result = stream.reduce(0, (x, y) -> {

  3. return x + y;

  4. });

  5. System.out.println(result);

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。


http://www.ppmy.cn/ops/40617.html

相关文章

如何通过OMS加快大表迁移至OceanBase

OMS&#xff0c;是OceanBase官方推出的数据迁移工具&#xff0c;能够满足众多数据迁移场景的需求&#xff0c;现已成为众多用户进行数据迁移同步的重要工具。OMS不仅支持多种数据源&#xff0c;还具备全量迁移、增量同步、数据校验等功能&#xff0c;并能够对分表进行聚合操作&…

网络安全之OSI七层模型详解

OSI七层模型分为控制层&#xff08;前三层&#xff09;和数据层&#xff08;后四层&#xff09;。从第七层到一层为&#xff1b; 应用层&#xff08;7&#xff09;接收数据 表示层&#xff08;6&#xff09;将数据翻译为机器语言 会话层&#xff08;5&#xff09;建立虚连接…

面试 Java 并发编程八股文十问十答第十二期

面试 Java 并发编程八股文十问十答第十二期 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01;关注专栏后就能收到持续更新&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1&#xff09;线程安全&#x…

leetcode63.跳跃游戏2(动态规划)

问题描述&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物…

2024.5.8 —— LeetCode 高频题复盘

目录 检测循环依赖7. 整数反转LCR 170. 交易逆序对的总数55. 跳跃游戏45. 二叉树的后序遍历50. Pow(x, n)40. 组合总和 II74. 搜索二维矩阵26. 删除有序数组中的重复项61. 旋转链表 检测循环依赖 题目链接 def haveCircularDependency(self, n: int, prerequisites):g [[]for…

十一、Redis持久化-RDB、AOF

Redis提供了两种持久化数据的方式。一种是RDB快照&#xff0c;另一种是AOF日志。RDB快照是一次全量备份&#xff0c;AOF日志是连续的增量备份。RDB快照是以二进制的方式存放Redis中的数据&#xff0c;在存储上比较紧凑&#xff1b;AOF日志记录的是对内存数据修改的指令文本记录…

Go-Zero自定义goctl实战:定制化模板,加速你的微服务开发效率(四)

前言 上一篇文章带你实现了Go-Zero和goctl&#xff1a;解锁微服务开发的神器&#xff0c;快速上手指南&#xff0c;本文将继续深入探讨Go-Zero的强大之处&#xff0c;并介绍如何使用goctl工具实现模板定制化&#xff0c;并根据实际项目业务需求进行模板定制化实现。 通过本文…

JavaEE开发重中之重 异常 捕获并抛出异常 自定义异常 2024详解

异常就是代表程序可能出现的问题 Error代表系统级别的错误 属于严重问题 Error是给sun公司用的&#xff0c;不是给程序员用的 Exception代表程序可能出现的问题 叫做异常 编译阶段不会出现异常提醒 运行时会出现的异常 编译阶段就会出现的异常 异常体系的最上层父类是E…

redis试题按知识点归类(三)

十一、发布/订阅 1.Redis 的发布/订阅模型是如何工作的&#xff1f; 2.如何使用 Redis 作为消息队列&#xff1f; 3.发布/订阅在实际应用中有哪些用例&#xff1f; 十二、缓存策略 1.如何确定 Redis 的缓存策略&#xff1f; 2.Redis 的缓存替换策略有哪些&#xff1f; 3…

个股期权是什么期权?个股期权什么时候推出?

今天期权懂带你了解个股期权是什么期权&#xff1f;个股期权什么时候推出&#xff1f;期权也称选择权&#xff0c;是指期权的买方有权在约定的期限内&#xff0c;按照事先确定的价格&#xff0c;买入或卖出一定数量某种特定商品或金融指标的权利。 个股期权是什么期权&#xff…

[华为OD] C卷 田忌赛马 DFS 200

题目&#xff1a; 给定两个只包含数字的数组a, b,调整数组a里面数字的顺序&#xff0c;使得尽可能多的a[i] >b[i]。 数组a和b中的数字各不相同。 输出所有可以达到最优结果的a数组的数量 输入描述 输入的第一行是数组a中的数字&#xff0c;其中只包含数字&#xff0c;每…

opencv车道偏离系统-代码+原理-人工智能-自动驾驶

车道偏离预警系统&#xff08;Lane Departure Warning System, LDWS&#xff09;是一种主动安全技术&#xff0c;旨在帮助驾驶员避免因无意中偏离车道而引发的事故。从原理到实战应用&#xff0c;其工作流程大致如下&#xff1a; 传感器采集 &#xff1a;系统通常配备有一个或…

掌握这个Jenkins插件,离测试开发又近一步!

Jenkins Pipeline是一种可编程的、可扩展的持续交付管道&#xff0c;允许您使用脚本来定义整个软件交付过程。 以下是使用Jenkins Pipeline创建和配置流水线的基本步骤。 Part 01. 创建一个Pipeline Job 在Jenkins中创建一个新的"Pipeline"类型的Job。 以下是在J…

网络工程师练习题

网络工程师练习题 POP3服务器默认使用TCP协议的110端口。当客户端收到多个DHCP服务器的响应时,客户端会选择最先到达的地址作为自己的IP地址。ISP分配给某公司的地址块为199.34.76.64/28,则该公司得到的IP地址数是16。下面是路由表的4个表项,与地址220.112.179.92匹配的表项…

计算机网络 3.3OSI参考模型

第三节 OSI参考模型 一、认识OSI/RM 1.描述&#xff1a;定义了一个连接异种计算机的标准主体结构&#xff0c;给网络设计者提供了一个参考规范。 2.组织&#xff1a;国际标准化组织. 3.发展&#xff1a;1979年研究并提出了该国际标准。 4.分层原则&#xff1a; ①层次的划…

Stable Diffusion WebUI 绘画

配置环境介绍​ 目前平台集成了 Stable Diffusion WebUI 的官方镜像&#xff0c;该镜像中整合如下资源&#xff1a; GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 Stable Diffusion WebUI版本&#xff1a;v1.7.0 Python版本&#xff1a;3.1…

Ubuntu(Linux)Windows 网络连接问题

需求&#xff1a;实现Ubuntu和Windows系统间以太网连接。 Windows端口以太网配置选择IPv4&#xff0c;配置自己的IP&#xff0c;子网掩码不需要填&#xff0c;系统自动补全&#xff0c;默认网关不需要填。 Ubuntu系统为22.04&#xff0c;如果使用网络设置完成IPv4地址设置&…

代码随想录算法训练营第四十六天|139.单词拆分,多重背包,背包问题总结

目录 139.单词拆分思路代码 多重背包思路代码 背包问题总结 139.单词拆分 题目链接&#xff1a;704. 二分查找 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;动态规划之完全背包&#xff0c;你的背包如何装满&#xff1f;| LeetCode&#xff1a;139.单词拆分 思路 dp数…

SQLZOO:Self join

数据表&#xff1a;stops-route stops: id,name route: num,company,pos,stop Q1 How many stops are in the database. SELECT COUNT(id) FROM stops Q2 Find the id value for the stop Craiglockhart SELECT id FROM stops WHERE nameCraiglockhart Q3 Give the i…

【npm】解决npm包突然消失MODULE_NOT_FOUND

今天折腾新特性时需要升级nodejs&#xff0c;安装新版后npm离奇消失了。C:\Users\**用户名\AppData\Roaming\npm\node_modules下只有cnpm&#xff0c;没有npm的目录。重装nodejs也不好使。 机智如我&#xff0c;试了下cnpm -v是正常的&#xff0c;而且能看到nodejs&#xff0c;…