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

之前给大家介绍的 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.mzph.cn/news/836901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用sqlmodel实现唯一性校验2,插入之前检查是否已存在

虽然之前添加唯一性校验的方法能够解决数据唯一的问题&#xff0c;但是如果忘了处理异常&#xff0c;则可能会导致程序崩溃。 在此基础上&#xff0c;我们可以在插入数据之前检查该数据是否已存在。 原来的代码&#xff1a; from sqlmodel import Field, Session, SQLModel,…

【opencv】图像处理(一)

实验环境&#xff1a;anaconda、jupyter notebook 实验用到的包&#xff1a;numpy,matplotlib,opencv 一、opencv安装 最好使用python3.6&#xff08;我之前用的3.9安装opencv3.4.1.15会失败&#xff09; conda create -n cv python3.6安装opencv3.4.1.15&#xff08;3.4.2版…

DS高阶:B树系列

一、常见的搜索结构 1、顺序查找 时间复杂度&#xff1a;O(N) 2、二分查找 时间复杂度&#xff1a;O(logN) 要求&#xff1a;&#xff08;1&#xff09;有序 &#xff08;2&#xff09;支持下标的随机访问 3、二叉搜索树&#xff08;BS树&#xff09; 时间复杂…

【Linux】文件描述符和重定向

目录 一、回顾C文件 二、系统文件I/O 2.1 系统调用 open 2.2 标志位传参 2.3 系统调用 write 2.4 文件描述符fd 2.5 struct file 2.6 fd的分配规则 2.7 重定向 2.7.1 基本原理&#xff1a; 2.7.2 系统调用 dup2 2.8 标准错误 一、回顾C文件 文件 内容 属性 对…

leetcode刷题:买卖股票的最佳时机

题目 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔交易中获取的最大…

文件操作IO网络编程网络原理

​ 文件操作—IO 文件在计算机中可以代表很多东西 在操作系统中, 文件主要是指硬盘文件 硬盘主要分为机械硬盘和固态硬盘。机械硬盘通过磁头在旋转的磁盘上读取数据&#xff0c;适合顺序读取。而固态硬盘则使用闪存芯片来存储数据&#xff0c;没有机械部件&#xff0c;因此读…

省公派访学|社科老师赴世界名校牛津大学开展研究

F老师已获某省公派出国访学半年的资助&#xff0c;希望落实的学校尽量知名。但因为F老师只是硕士毕业而无博士学位&#xff0c;专业方向又是社科类&#xff0c;所以申请到世界知名高校有一定难度。经过努力&#xff0c;最终我们获得了世界顶尖高校-英国牛津大学的访问学者邀请函…

html5的一些新特性

最近总是碰到html5特性这种问题,虽然简单,但是也是自己平时不关注的东西,趁今天时间充裕,那就来总结一下吧 HTML5新特性包括新增了部分标签、表单元素增强、支持视频和音频、支持canvas绘图、提供web存储、提供地理定位功能、提供web workers机制、提供web socket协议、提供CS…

《intel开发手册卷3》读书笔记1

1、CPU工作模式 1&#xff09;实模式&#xff1a;8086的寄存器只有16位&#xff0c;我们也习惯于称8086的工作模式为16位模式。后续的CPU为了保持兼容性&#xff0c;在芯片上了电以后&#xff0c;还必须运行于16位模式之下。这种模式还有个正式的名字叫做实模式。在实模式下&am…

【游戏引擎】unity

目录 Unity入门教程&#xff1a;从零到英雄的旅程前言第一步&#xff1a;下载和安装Unity第二步&#xff1a;创建你的第一个Unity项目第三步&#xff1a;熟悉Unity界面第四步&#xff1a;创建一个简单的游戏对象第五步&#xff1a;编写脚本赋予游戏对象生命第六步&#xff1a;运…

探索车路云深度融合的优化与实践

项目背景与业务场景 目前&#xff0c;我国车联网行业处于与 5G 技术的深度融合时期。随着汽车从传统交通工具向着智能化、网联化和电动化方向演进&#xff0c;车联网成为 5G 交通和汽车领域跨界融合最具潜力的应用&#xff0c;已经成为我国战略性新兴产业的重要发展方向。通过…

Linux perf:系统性能监控和分析工具

1. 写在前面 Linux perf 是 Linux 2.6 后内置于内核源码树中的性能剖析&#xff08;profiling&#xff09;工具,它基于事件采样&#xff0c;以性能事件为基础&#xff0c;针对 CPU 相关性能指标与操作系统相关性能指标进行性能剖析&#xff0c;可用于性能瓶颈查找与热点代码的…

保研机试之【x86/x86-64体系结构中的寄存器】

先来看一下这六个选项的功能&#xff1a; 举一个例子&#xff1a; 对于CR2寄存器和中断向量表&#xff1a; 也就是先通过CR2寄存器找到引发错误的虚拟地址&#xff0c;然后操作系统分析错误原因&#xff0c;通过IDTR寄存器找到IDT&#xff08;中断向量表&#xff09;&#xff0…

栈与递归的实现

1. 栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则&#x…

光纤VS紫外:如何选择最适合您生产线的激光打标机?

光纤激光打标机和紫外激光打标机在制造业中都有其独特的应用&#xff0c;但两者在原理、特点和应用范围上存在一些差异。 光纤激光打标机是一种采用光纤输出激光&#xff0c;并通过高速扫描振镜系统实现打标功能的新一代激光打标机系统。它电光转换效率高&#xff0c;达到30%以…

C++进阶:AVL树详解及模拟实现(图示讲解旋转过程)

C进阶&#xff1a;AVL树详解及模拟实现&#xff08;图示讲解旋转过程&#xff09; 之前在搜索二叉树最后早就埋下伏笔&#xff0c;来介绍AVL树和红黑树&#xff0c;今天就先来第一个吧 文章目录 1.AVL树介绍1.1概念介绍1.2核心性质 2.项目文件规划3.整体框架&#xff08;节点和…

JDK 1.8 HashMap扩容机制

我们首先来看利用无参构造函数创建HashMap如何扩容。首先创建一个无参构造出来的hashmap HashMap hashMap new HashMap();该构造函数源码如下&#xff1a; public HashMap() {this.loadFactor DEFAULT_LOAD_FACTOR; // all other fields defaulted}此时&#xff0c;该构造函…

linux笔记5--shell命令2

文章目录 一. linux中的任务管理1. 图形界面2. 命令① top命令② grep命令③ ps命令补充&#xff1a; ④ kill命令图形界面杀死进程 二. 挂载(硬盘方面最重要的一个知识点)1. 什么是挂载2. 关于挂载目录① Windows② linux查看硬件分区情况(/dev下)&#xff1a;更改挂载目录结束…

揭秘 HTTP 代理:增强在线活动的安全性和匿名性

HTTP 代理在保护您的在线隐私、增强安全性以及允许访问受限内容方面发挥着关键作用。了解 HTTP 代理的工作原理以及如何有效地利用它们可以让您掌控自己的在线状态和浏览体验。让我们深入研究 HTTP 代理的世界&#xff0c;探索它们的优势、应用程序以及最大化其效用的最佳实践。…

【Unity Shader入门精要 第6章】基础光照(二)

1. 获取环境光 unity shader中可以通过 UNITY_LIGHTMODEL_AMBIENT获取当前环境光颜色信息。 fixed4 frag(v2f i) : SV_Target {return UNITY_LIGHTMODEL_AMBIENT; }2. 漫反射 2.1 兰伯特模型 创建Chapter_6_Diffuse_Lambert作为测试材质创建Chapter_6_Diffuse_Lambert作为测…