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);

总结:

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

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

软件测试面试文档

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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/621521.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

资料如何打印更省钱

在日常工作和学习中&#xff0c;我们经常需要打印各种资料。然而&#xff0c;随着打印成本的不断提高&#xff0c;如何更省钱地打印资料成为了大家关注的焦点。今天&#xff0c;就为大家分享一些资料打印的省钱技巧&#xff0c;并推荐一个省钱又省心的打印平台。 首先&#xff…

冥想的时候怎么专注自己

冥想的时候怎么专注自己&#xff1f;我国传统的打坐养生功法&#xff0c;实际最早可追溯到五千年前的黄帝时代。   每天投资两个半小时的打坐&#xff0c;有上千年之久的功效。因为当你们打坐进入永恒时&#xff0c;时间停止了。这不只是两个半小时&#xff0c;而是百千万亿年…

深入探讨黑盒测试:等价类划分与边界值分析

文章目录 概要黑盒测试等价类划分边界值分析 设计测试用例小结 概要 在软件开发领域&#xff0c;测试是确保产品质量的关键步骤之一。而黑盒测试方法作为其中的一种&#xff0c;通过关注输入与输出之间的关系&#xff0c;而不考虑内部实现的细节&#xff0c;被广泛应用于各种软…

使用git系统来更新FreeBSD ports源码

FreeBSD跟其它系统相比一大特色就是ports系统。 The Ports Collection is a set of Makefiles, patches, and description files. Each set of these files is used to compile and install an individual application on FreeBSD, and is called a port. By default, the Po…

5 款免费好用的精品软件推荐!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/ 1.系统优化软件 - Wise Care 365 Wise Care 365 -全球最快的系统优化软件&#xff01;精简系统、管理启动项、清理和优化注册表、清理个人隐私…

基于51单片机的冰箱控制系统设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机冰箱控制系统设计( proteus仿真程序设计报告原理图讲解视频&#xff09; 基于51单片机冰箱控制系统设计 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单&&下载链接资料下载链接&#xff1a; …

Debian mariadb 10.11 XXXX message from server: “Too many connections“

问题表现 报错信息&#xff1a;Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections" 处理步骤 1、尝试能不能通过终端登录&…

从头理解transformer,注意力机制(下)

交叉注意力 交叉注意力里面q和KV生成的数据不一样 自注意力机制就是闷头自学 解码器里面的每一层都会拿着编码器结果进行参考&#xff0c;然后比较相互之间的差异。每做一次注意力计算都需要校准一次 编码器和解码器是可以并行进行训练的 训练过程 好久不见输入到编码器&…

SpringBoot中@Value注入失败

首先&#xff0c;不支持static的 解决&#xff1a;使用setter方法进行属性的赋值,并且setter方法不能有static 生成set/get方法就可以了&#xff0c;然后Value 放在set上

《系统架构设计师教程(第2版)》第10章-软件架构的演化和维护-07-软件架构维护

文章目录 1. 软件架构知识管理1.1 概念1.2 架构知识的获取1.3 作用1.4 架构知识管理的现状 2 软件架构修改管理3 软件架构版本管理4. 示例4.1 背景4.2 数据获取4.3 数据计算4.4 结果分析4.4.1 圈复杂度 (CCN)4.4.2 扇入扇出度 (FFC)4.4.3 模块间耦合度 (CBO)4.4.4 模块的响应 (…

x264 场景切换检测算法分析

x264 编码器场景切换 在 x264 编码器中,场景切换(Scene Cut)检测是一个重要的特性,它用于识别视频中不同场景之间的过渡点。这些过渡点通常是视觉上显著不同的帧,比如从一个镜头切换到另一个镜头。在这些点插入关键帧(I帧)可以提高视频的随机访问性和编码效率。 入口函…

vue 百度地图点击marker修改marker图片,其他marker图片不变。

解决思路&#xff0c;就是直接替换对应marker的图片。获取marker对象判断点击的marker替换成新图片&#xff0c;上一个被点击的就替换成老图片。 marker.name tag;marker.id i; //一定要设置id&#xff0c;我这里是设置的循环key值&#xff0c;要唯一性。map.addOverlay(mark…

SSRF(服务器端请求伪造)的学习以及相关例题(上)

目录 一、SSRF的介绍 二、漏洞产生的原因 三、利用SSRF可以实现的效果&#xff08;攻击方式&#xff09; 四、SSRF的利用 五、SSRF中的函数 file_get_content() 、fsockopen() 、curl_exec() 1.file_get_content()&#xff1a; 2.fsockopen(): 3.curl_exec()&#xff1…

【鸿蒙开发】第二十四章 IPC与RPC进程间通讯服务

1 IPC与RPC通信概述 IPC&#xff08;Inter-Process Communication&#xff09;与RPC&#xff08;Remote Procedure Call&#xff09;用于实现跨进程通信&#xff0c;不同的是前者使用Binder驱动&#xff0c;用于设备内的跨进程通信&#xff0c;后者使用软总线驱动&#xff0c;…

算法设计与分析(超详解!) 第三节 贪婪算法

1.贪心算法基础 1.贪心算法的基本思想 贪心算法是从问题的某一个初始解出发&#xff0c;向给定的目标推进。但它与普通递推求解过程不同的是&#xff0c;其推动的每一步不是依据某一固定的递推式&#xff0c;而是做一个当时看似最佳的贪心选择&#xff0c;不断地将问题实例归…

【选择结构程序设计-谭浩强适配】(适合专升本、考研)

无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 完整资料如下&#xff1a;纯干货、纯干货、纯干货&#xff01;&#xff01;…

uni-app跨端兼容

1.样式兼容 小程序端不支持*选择器&#xff0c;可以使用&#xff08;view,text&#xff09; 页面视口差异(tabar页、普通页) H5端默认开始scoped 例如骨架屏样式出现问题&#xff0c;需要将之前的样式拷贝到骨架屏中 提示&#xff1a;H5端是单页面应用&#xff0c;scoped隔离…

【吊打面试官系列】Java高并发篇 - 如何创建守护线程?

大家好&#xff0c;我是锋哥。今天分享关于 【如何创建守护线程&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 如何创建守护线程&#xff1f; 使用 Thread 类的 setDaemon(true)方法可以将线程设置为守护线程&#xff0c;需要注意的是&#xff0c;需要在调用 …

家政服务新体验——家政小程序开发,让生活更轻松!

一、引言 随着现代生活节奏的加快&#xff0c;家政服务已经成为越来越多家庭不可或缺的一部分。然而&#xff0c;传统家政服务方式往往存在预约不便、服务质量参差不齐等问题。为了解决这些问题&#xff0c;我们精心打造了一款家政小程序&#xff0c;为您带来全新的家政服务体…

Codeforces Round 843 (Div. 2) B. Gardener and the Array (构造)

原题地址 The gardener Kazimir Kazimirovich has an array of n n n integers c 1 , c 2 , … , c n c_1, c_2, \dots, c_n c1​,c2​,…,cn​. He wants to check if there are two different subsequences a a a and b b b of the original array, for which f ( a ) …