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

Stream流编程

 流格式

Stream<T> filter(Predicate<? super T> predicate);-----> 参数:public interface Predicate<T>  (函数式接口)----> 抽象方法:boolean test(T t);-----> 参数:public interface Consumer<T>  (函数式接口)----> 抽象方法:boolean test(T t);
获取流

根据集合来获取:

根据Collection获取流:

Collection接口中有一个stream()方法,可以获取流

        default Stream<E> stream()
Stream<String> stream1 = list.stream();
        // 创建Map集合Map<Integer,String> map = new HashMap<>();map.put(1,"张老三");map.put(2,"张小三");map.put(3,"李四");map.put(4,"赵五");map.put(5,"张六");map.put(6,"王八");// 3.1根据Map集合的键获取流Set<Integer> map1 = map.keySet();Stream<Integer> stream3 = map1.stream();// 3.2根据Map集合的值获取流Collection<String> map2 = map.values();Stream<String> stream4 = map2.stream();// 3.3根据Map集合的键值对对象获取瑞Set<Map.Entry<Integer, String>> map3 = map.entrySet();Stream<Map.Entry<Integer, String>> stream5 = map3.stream();
        // 根据数组获取流String[] arr = {"张颜宇","张三","李四","赵五","刘六","王七"};Stream<String> stream6 = Stream.of(arr);

 

Stream流的常用方法:

终结方法:返回值类型不再是Stream接口本身类型的方法,例如:forEach方法和count方法

非终结方法/延迟方法:返回值类型仍然是Stream接口自身类型的方法,除了终结方法都是延迟方法。例如:filter,limit,skip,map,conat

 count
        List<String> list = new ArrayList<>();list.add("张老三");list.add("张小三");list.add("李四");list.add("赵五");list.add("张六");list.add("王八");long count = list.stream().count();System.out.println("集合中的元素个数是:" + count);输出结果:集合中的元素个数是:6

 

.filter方法:

Stream<T> filter(Predicate<? super ?> predicate); 过滤出满足条件的元素

参数Predicate:函数式接口,抽象方法:boolean test (T t)

Predicate接口:是一个判断接口

        // 获取stream流Stream<String> stream = Stream.of("张老三", "张小三", "李四", "赵五", "刘六", "王七");// 需求:过去出姓张的元素stream.filter((String name)->{return name.startsWith("张");}).forEach((String name)->{System.out.println("流中的元素" + name);});
forEach方法

void forEach(Consumer<? super T> action):逐一处理流中的元素 参数 Consumer<? super T> action:函数式接口,只有一个抽象方法:void accept(T t);

注意:

1.此方法并不保证元素的逐一消费动作在流中是有序进行的(元素可能丢失)

2.Consumer是一个消费接口(可以获取流中的元素进行遍历操作,输出出去),可以使用Lambda表达式

        List<String> list = new ArrayList<>();list.add("张老三");list.add("张小三");list.add("李四");list.add("赵五");list.add("张六");list.add("王八");// 函数模型:获取流 --> 注意消费流中的元素list.stream().forEach((String name)->{System.out.println(name);});输出结果:张老三张小三李四赵五张六王八
limit方法

Stream<T> limit(long maxSize); 取用前几个元素

注意:

参数是一个long 类型,如果流的长度大于参数,则进行截取;否则不进行操作

        // 获取流的长度Stream<String> stream1 = Stream.of("张老三", "张小三", "李四", "赵五", "刘六", "王七");// 需求:保留前三个元素stream1.limit(3).forEach((String name)->{System.out.println("流中的前三个元素是:" + name);});输出结果:流中的前三个元素是:张老三流中的前三个元素是:张小三流中的前三个元素是:李四

 

map方法

<r> Stream <R> map(Function<? super T,? exception R> mapper; 参数Function<T,R>:函数式接口,抽象方法:R apply(T t); Function<T,R>:其实就是一个类型转换接口(T和R的类型可以一致,也可以不一致)

        // 获取Stream流Stream<String> stream1 = Stream.of("11","22","33","44","55");// 需求:把stream1流中的元素转换为int类型stream1.map((String s)->{return Integer.parseInt(s); // 将String类型的s进行转换为Integer类型的元素,并返回}).forEach((Integer i)->{System.out.println(i);  // 将转换后的int类型的元素逐一输出});输出结果:1122334455
skip方法

Stream<T> skip(long n); 跳过前几个元素 注意: 如果流的当前长度大于n,则跳过前n个,否则将会得到一个长度为0的空流

 

        // 获取stream流Stream<String> stream = Stream.of("张老三", "张小三", "李四", "赵五", "刘六", "王七");stream.skip(3).forEach((String name)->{System.out.println("跳过前三个,打印剩下的" + name);});输出结果:跳过前三个,打印剩下的赵五跳过前三个,打印剩下的刘六跳过前三个,打印剩下的王七
concat方法

public static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b) –> 合并两个流

         Stream<String> stream1 = Stream.of("11","22","33","44","55");Stream<String> stream2 = Stream.of("张颜宇", "张三", "李四", "赵五", "刘六", "王七");// 需求:合并两个流Stream<String> stream = Stream.concat(stream1,stream2);stream.forEach((String name)->{System.out.print(name);});输出结果:1122334455张颜宇张三李四赵五刘六王七
收集Stream流 

Stream流中提供了一个方法,可以把流中的数据收集到单例集合中

<R, A> R collect(Collector<? super T, A, R> collector);

把流中的数据手机到单列集合中 返回值类型是R。R指定为什么类型,就是手机到什么类型的集合 参数Collector<? super T, A, R>中的R类型,决定把流中的元素收集到哪个集合中 参数Collector如何得到 ?,

可以使用 java.util.stream.Collectors工具类中的静态方法:

– public static <T> Collector<T, ?, List<T>> toList():

转换为List集合 – public static <T> Collector<T, ?, Set<T>> toSet() :转换为Set集合

        List<String> list2 = new ArrayList<>();list2.add("张老三");list2.add("张小三");list2.add("李四");list2.add("赵五");list2.add("张六");list2.add("王八");// 需求:过滤出姓张的并且长度为3的元素Stream<String> stream = list2.stream().filter((String name) -> {return name.startsWith("张");}).filter((String name) -> {return name.length() == 3;});// stream 收集到单列集合中List<String> list = stream.collect(Collectors.toList());System.out.println(list);// stream 手机到单列集合中Set<String> set = stream.collect(Collectors.toSet());System.out.println(set);

相关文章:

Stream流编程

流格式 Stream<T> filter(Predicate<? super T> predicate);-----> 参数&#xff1a;public interface Predicate<T> (函数式接口)----> 抽象方法&#xff1a;boolean test(T t);-----> 参数&#xff1a;public interface Consumer<T> (函…...

jenkins自动化脚本集成时钉钉消息未发送

在进行jenkins自动化脚本集成时&#xff0c;需要配置钉钉发送消息。钉钉的配置正确&#xff0c;测试钉钉消息发送成功&#xff0c;但是当构建项目时&#xff0c;却没有收到钉钉消息&#xff0c;报错如下&#xff1a; [钉钉插件]发送消息时报错: java.lang.NullPointerExceptio…...

java面试题第七天

一、java面试题第七天 1.方法重载和重写的区别&#xff1f; 方法重载&#xff1a;在同一个类中&#xff0c;不同的方法拥有同样的方法名&#xff0c;不一样的参数列表&#xff0c;这就叫做方法重载 **方法的重写&#xff1a;**描述的是父类和子类之间的。当父类的功能无法满…...

MATLAB入门-矩阵的运算

MATLAB入门-矩阵的运算 本篇文章为学习笔记&#xff0c;课程链接为&#xff1a;头歌 相关知识 常见的矩阵运算有算术运算、关系运算和逻辑运算。MATLAB中的所有变量都是以矩阵的形式存储的&#xff0c;单个变量就相当于一个1*1的矩阵。 算术运算 下面展示的是常见的矩阵之…...

[X3m]ros交叉编译

ros需要安装以下包 PYTHON_PACKAGE_LIST"lark lark-parser netifaces pyyaml ifcfg pyunicodedata " TogetheROS.Bot | TogetheROS.Bot用户手册 编译tros.b​ 1 使用docker文件​ 该部分操作均在开发机的docker内完成。 ## 创建目录 cd /mnt/data/kairui.wang/…...

【漏洞库】Fastjson_1.2.47_rce

文章目录 漏洞描述漏洞编号漏洞评级影响版本漏洞复现- 利用工具- 漏洞环境- 漏洞扫描- 漏洞验证- 深度利用- GetShell- EXP 编写 漏洞挖掘- 寻找入口点- 指纹信息 修复建议- 漏洞修复 漏洞原理 漏洞描述 Fastjson是阿里巴巴公司开源的一款json解析器&#xff0c;其性能优越&am…...

zabbix 钉钉微信企微告警(动作操作消息内容模板)

一、环境配置 1、配置zabbix服务端 2、配置监控主机&监控项&监控模板 zabbix配置安装_this page is used to test the proper operation of _疯飙的蜗牛的博客-CSDN博客 二、触发器 触发器的本质就是一个条件判断&#xff0c;对于不同的监控数据来说&#xff0c;我…...

阿里云国际站云服务器数据备份方法有哪些?

阿里云国际站云服务器是一种根据云计算技术的虚拟服务器&#xff0c;它能够经过互联网提供计算资源和服务。在运用云服务器的过程中&#xff0c;数据备份是非常重要的一个环节。本文将介绍云服务器数据备份的办法&#xff0c;包含手动备份、主动备份和数据同步。 一、手动备份 …...

游戏笔记本电脑可以进行 3D 建模和渲染吗?有哪些优势与缺点?

3D 建模和渲染是创建令人惊叹的数字艺术、动画和游戏体验的最流行和最广泛使用的工具之一。随着技术的进步&#xff0c;对运行这些模型的强大计算机的需求呈指数级增长。对于那些寻求强大机器来处理 3D 建模任务的人来说&#xff0c;游戏笔记本电脑已成为一个可行的选择。 游戏…...

【AI】推理系统和推理引擎的整体架构

本文主要是对 B 站 Up 主 ZOMI酱 推理系统系列视频 的理解&#xff0c;可以认为是重点笔记。 一、深度学习模型的全生命周期 相信很多人和我一样&#xff0c;刚看到深度学习模型中的推理系统或推理引擎时是一头雾水&#xff0c;因为学习 DL 时通常关注于模型的设计和训练。下图…...

k8s集群中流水线部署微服务

k8s集群中流水线发布微服务 一、流水线部署微服务部署流程 二、微服务发布流程 pipeline {agent {node {label maven}}parameters {string(name: PROJECT_VERSION, defaultValue: v1.0, description: )string(name: PROJECT_NAME, defaultValue: , description: )}environment…...

Socks5代理与网络安全:保护您的隐私与数据

在今天数字化的世界中&#xff0c;隐私和网络安全已经成为至关重要的话题。Socks5代理作为一种强大的工具&#xff0c;不仅为用户提供了隐私保护&#xff0c;还在网络安全和爬虫领域发挥着关键作用。本文将深入探讨Socks5代理的工作原理、其在网络安全中的应用&#xff0c;以及…...

2024年山东高企申报注意事项

1、分析企业技术及财务报表 分析财务数据及企业主营产品和技术点。用以确定申报材料的撰写方向。一般耗时1周左右。&#xff08;纺织厂、服装厂等传统行业面临申报中的面临研发人员比例不达标&#xff0c;研发费用不达标&#xff0c;高新技术产品比例不达标等难题。&#xff09…...

npm publish包报404,is not in the npm registry错误

1. 指定发布目标2. 登录npm&#xff0c;使用登录名发布包&#xff0c;包名命名原则“登录名/包名”&#xff0c;或 “包名” 3. 删除某一个版本npm unpublish pvfhv/eslint-config-prettier1.0.1 --force 删除后的版本不能重复使用&#xff0c;正式解释&#xff1a; Unfortun…...

pytest-基础

一.使用pytest,默认的测试用例的规则以及基础应用 1.模块名字必须已test_开头或者_test结尾 2.测试类必须以Test开头,并且不能有init方法 3.测试方法必须以test开头 示例代码 test_001.py import pytest class TestCase:def test_case(self):print("执行测试用例&quo…...

在openSUSE上开启护眼模式

色温 色温是用来衡量光源色彩时所用到的一个概念&#xff0c;单位为开尔文。热黑体辐射体与光源温度相同时的温度&#xff0c;就是该光源的色温。 显而易见&#xff0c;色温越低时&#xff0c;光源看起来越黄&#xff1b;色温越高时&#xff0c;光源看起来越蓝。下面是一些常见…...

vue基础知识十:Vue中组件和插件有什么区别?

一、组件是什么 回顾以前对组件的定义&#xff1a; 组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念&#xff08;组件&#xff09;来实现开发的模式&#xff0c;在Vue中每一个.vue文件都可以视为一个组件 组件的优势 降低整个系统的耦合度&#xff0c;在保持接口不…...

Arthas是一个Java诊断工具 的入门使用

Arthas是一个Java诊断工具&#xff0c;可以帮助开发人员在运行时快速诊断和解决线上应用故障。 以下是Arthas的入门步骤&#xff1a; 安装Arthas 你可以在Arthas Github页面中找到安装指南&#xff0c;根据操作系统选择相应的安装方式。 启动Arthas 在安装完成后&#xff…...

数据结构——排序算法——桶排序

桶排序的思想是&#xff1a; 1.将区间划分为 n 个相同大小的子区间&#xff0c;每个子区间称为一个桶 2.遍历数组&#xff0c;将每个数字装入桶中 3.对每个桶内的数字单独排序&#xff0c;这里需要采用其他排序算法&#xff0c;如插入、归并、快排等 4.最后按照顺序将所有桶内的…...

Kafka消息发送可靠性分析

Apache Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者和生产者之间的所有实时数据。Kafka的主要特性包括&#xff1a;高吞吐量、可扩展性、持久性、分布式、可容错等。这些特性使得Kafka成为大规模数据处理和实时数据分析的理想选择。然而&#xf…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...