探索 Java 8 中的 Stream 流:构建流的多种方式

目录

前言 

什么是 Stream 流? 

创建 Stream 流 

1. 从集合创建 Stream 

2. 从数组创建 Stream

3. 使用 Stream.of 创建 Stream 

4. 使用 Stream.generate 创建 Stream 

5. 使用 Stream.iterate 创建 Stream 

Stream 流的操作 

1. 过滤数据

2. 映射数据 

3. 排序数据 

4. 聚合数据 

将多个流合并 

结语


作者简介: 懒大王敲代码,计算机专业应届生

今天给大家聊聊探索 Java 8 中的 Stream 流:构建流的多种方式,希望大家能觉得实用!
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖  

其他专栏:

技术分享专栏icon-default.png?t=N7T8http://t.csdnimg.cn/LVrbCjava专栏icon-default.png?t=N7T8http://t.csdnimg.cn/bw2Thubantu与C语言学习专栏icon-default.png?t=N7T8http://t.csdnimg.cn/A8yIivue3项目实战专栏icon-default.png?t=N7T8http://t.csdnimg.cn/vP2no内网穿透专栏icon-default.png?t=N7T8http://t.csdnimg.cn/GJZJA懒大王闲谈专栏icon-default.png?t=N7T8http://t.csdnimg.cn/KxzqY

前言 

Java 8 引入了 Stream API,这是一种强大的工具,用于处理集合数据。Stream 允许你以声明性的方式对数据进行操作,这意味着你可以轻松地执行过滤、映射、排序、聚合等操作,而无需编写复杂的迭代代码。本文将探讨 Java 8 中 Stream 流的多种构建方式,以帮助你更好地利用这一强大功能。

什么是 Stream 流? 

在深入探讨如何构建 Stream 流之前,让我们先理解 Stream 是什么以及它为什么如此重要。

Stream 是 Java 8 引入的一种抽象的数据类型,它代表一个序列化的数据集合。Stream 不是一个数据结构,而是一种用于处理数据的工具,它允许你执行各种操作,例如过滤、映射、排序和聚合,以便提取所需的信息。Stream 的主要特点包括:

声明性: 使用 Stream,你可以告诉程序你要做什么,而不是怎么做。这使得代码更容易阅读和维护。
懒加载: Stream 操作不会立即执行,而是在需要的时候才进行计算。这可以提高性能,因为它避免了不必要的计算。
可并行化: Stream 操作可以自动并行执行,充分利用多核处理器的性能。

创建 Stream 流 

Java 8 提供了多种方式来创建 Stream 流,以下是其中一些常见的方式。

1. 从集合创建 Stream 

你可以使用集合类的 stream 方法或 parallelStream 方法来创建一个 Stream 流。这是使用 Stream 的最常见方式,因为你通常需要在已有的数据集合上执行操作。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");// 从 List 创建 Stream
Stream<String> nameStream = names.stream();// 从 Set 创建并行 Stream
Stream<String> parallelNameStream = new HashSet<>(names).parallelStream();

2. 从数组创建 Stream

你可以使用 Arrays.stream 方法来从数组创建 Stream。

int[] numbers = {1, 2, 3, 4, 5};// 从数组创建 IntStream
IntStream numberStream = Arrays.stream(numbers);

3. 使用 Stream.of 创建 Stream 

你可以使用 Stream.of 方法创建包含指定元素的 Stream。

Stream<String> stream = Stream.of("Apple", "Banana", "Cherry");

4. 使用 Stream.generate 创建 Stream 

你可以使用 Stream.generate 方法创建一个无限流,通过传入一个 Supplier 函数来生成流中的元素。

Stream<String> infiniteStream = Stream.generate(() -> "Hello, World!");

这将创建一个无限包含 “Hello, World!” 的 Stream。你可以使用 limit 方法来限制流的大小。

Stream<String> limitedStream = Stream.generate(() -> "Hello, World!").limit(5);

5. 使用 Stream.iterate 创建 Stream 

你可以使用 Stream.iterate 方法创建一个包含迭代元素的 Stream。你需要提供一个初始元素和一个 UnaryOperator 函数,该函数定义了如何生成下一个元素。

Stream<Integer> numbers = Stream.iterate(0, n -> n + 2);

这将创建一个包含偶数的无限流。同样,你可以使用 limit 方法来限制流的大小。

Stream<Integer> limitedNumbers = Stream.iterate(0, n -> n + 2).limit(10);

Stream 流的操作 

一旦你创建了一个 Stream,你可以对其执行各种操作。以下是一些常见的操作:

1. 过滤数据

 你可以使用 filter 方法来过滤流中的元素。例如,如果你有一个包含数字的流,你可以过滤出所有的偶数。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());// 输出:[2, 4, 6, 8, 10]
System.out.println(evenNumbers);

2. 映射数据 

你可以使用 map 方法来对流中的每个元素执行一个函数,并将结果收集到一个新的流中。

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");List<Integer> nameLengths = names.stream().map(String::length) // 映射为字符串长度.collect(Collectors.toList());// 输出:[5, 3, 7]
System.out.println(nameLengths);

3. 排序数据 

 你可以使用 sorted 方法对流中的元素进行排序。

List<String> fruits = Arrays.asList("Banana", "Apple", "Cherry");List<String> sortedFruits = fruits.stream().sorted().collect(Collectors.toList());// 输出:[Apple, Banana, Cherry]
System.out.println(sortedFruits);

4. 聚合数据 

你可以使用各种聚合操作,如 reduceminmaxcount 等,来汇总流中的元素。

List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5);int sum = numbers.stream().reduce(0, Integer::sum);long count = numbers.stream().count();// 输出:sum = 38, count = 11
System.out.println("sum = " + sum + ", count = " + count);

将多个流合并 

你可以使用 Stream.concat 方法将两个流合并为一个流。这在你需要合并多个数据源时非常有用。

Stream<String> stream1 = Stream.of("A", "B", "C");
Stream<String> stream2 = Stream.of("X", "Y", "Z");Stream<String> mergedStream = Stream.concat(stream1, stream2);// 输出:[A, B, C, X, Y, Z]
System.out.println(mergedStream.collect(Collectors.toList()));

结语


Stream 是 Java 8 引入的一项强大的功能,使数据处理变得更加简单和高效。你可以使用多种方式来创建 Stream 流,并对其进行各种操作。这使得你能够以声明性的方式处理集合数据,而无需编写复杂的迭代代码。希望本文中的示例代码和解释有助于你更好地理解 Stream 的使用方法,以提高你的 Java 编程技能。 Stream 的学习曲线可能会有些陡峭,但一旦掌握,它将成为你处理数据的得力工具。

关于探索 Java 8 中的 Stream 流:构建流的多种方式,懒大王就先分享到这里了,如果你认为这篇文章对你有帮助,请给懒大王点个赞点个关注吧,如果发现什么问题,欢迎评论区留言!!💕💕      

其他专栏:

技术分享专栏icon-default.png?t=N7T8http://t.csdnimg.cn/LVrbCjava专栏icon-default.png?t=N7T8http://t.csdnimg.cn/bw2Thubantu与C语言学习专栏icon-default.png?t=N7T8http://t.csdnimg.cn/A8yIivue3项目实战专栏icon-default.png?t=N7T8http://t.csdnimg.cn/vP2no内网穿透专栏icon-default.png?t=N7T8http://t.csdnimg.cn/GJZJA懒大王闲谈专栏icon-default.png?t=N7T8http://t.csdnimg.cn/KxzqY

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

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

相关文章

01 ZigBee开发环境IAR搭建

链接&#xff1a;https://pan.baidu.com/s/18l8z9qajPBj2X5WzgjT0TA?pwd41qc 提取码&#xff1a;41qc 注意&#xff1a;安装包和注册机都要右击用管理员权限打开&#xff0c;安装过程中关闭杀毒软件&#xff08;否则后续程序不行&#xff09; 安装IAR-8051 以管理员身份运行E…

鸿蒙开发已解决-arkts编译报错-arkts-limited-stdlib错误

文章目录 项目场景:问题描述原因分析:解决方案:适配指导案例此Bug解决方案总结项目场景: arkts编译报错-arkts-limited-stdlib错误。 我用Deveco studio4.0 beta2开发应用,报arkts-limited-stdlib错误 报错内容为: ERROR: ArKTS:ERROR File: D:/prRevivw/3792lapplica…

行列式的计算

1、基本性质&#xff1a; 1&#xff09;行列式转置相等 2&#xff09;任意两行&#xff08;列&#xff09;成比例&#xff0c;行列式为0 3&#xff09;对换任意某两行&#xff08;列&#xff09;&#xff0c;行列式变号 4&#xff09;某一行&#xff08;列&#xff09;乘某…

Ubuntu下VsCode+CMake 交叉编译

参考连接&#xff1a; Ubuntu下VsCodeCMake 交叉编译 VSCode与CMake搭配使用之基本配置 VSCode与CMake搭配使用之交叉编译 step1: CtrlShiftp打开VSCode的指令面板&#xff0c;然后输入cmake:q ; 在窗口搜索&#xff1a;“ >CMake:Edit user-loacl CMake kits ”会打开一个…

SpringBoot集成阿里云短信实现发送短信验证码

SpringBoot集成阿里云短信实现发送短信验证码 一、准备工作1、注册账号2、申请资质3、申请签名4、创建模板 二、springboot集成发送短信1、引入依赖2、编写短信配置文件3、编写短信发送工具类 一、准备工作 在使用springboot集成短信服务之前&#xff0c;需要先注册阿里云的账…

VMware vSphere运维管理手册

适用版本:VMware vSphere 7.0 VMware vSphere 是 VMware 的虚拟化平台,可将数据中心转换为包括 CPU、存储和网络资源的聚合计算基础架构。vSphere 将这些基础架构作为一个统一的运行环境进行管理,并为您提供工具来管理加入该环境的数据中心。 ![[Pasted image 20231212132…

uni-app的学习【第二节】

四 路由配置及页面跳转 (1)路由配置 uni-app页面路由全部交给框架统一管理,需要在pages.json里配置每个路由页面的路径以及页面样式(类似小程序在app.json中配置页面路由) (2)路由跳转 uni-app有两种页面路由跳转方式:使用navigator组件跳转(标签式导航)、调用API跳…

比亚迪:从低谷中涅槃,内功造就辉煌

修炼内功才能绽放光芒吗? 比亚迪用自己的奋斗史证明~ 只有经历低谷的洗礼&#xff0c;才能铸就属于自己的辉煌。 比亚迪这家公司的发展历程可谓是一部从战略转型到今天这个行业翘楚的奋斗史&#xff0c;真是跌宕起伏令人唏嘘。早期比亚迪从一个传统企业转型到汽车行业&#xf…

电源模块常见温升测试方法分享 -纳米软件

温升测试是电器产品安规测试项目之一&#xff0c;是为了检测电器产品及部件的温度变化情况&#xff0c;判断是否符合要求。在设备运行过程中会释放一定的热量&#xff0c;如果内部温度过高会影响产品的性能和稳定性&#xff0c;导致绝缘性能下降&#xff0c;因此温升测试是确保…

sshpass 命令exit code 6 问题解决方法

近期在使用sshpass做自动化交互的脚本&#xff0c;结果运行命令后会返回错误码6,命令如下&#xff1a; sshpass -p 123456 ssh test192.168.1.100 "uname -a" 经搜索资料发现&#xff0c;错误码6指的是Host public key is unknown&#xff0c;也就是说要访问的地址是…

股东分红模式玩法解析!

股东分红模式股东分红模式是指公司通过向股东支付现金或股票的方式&#xff0c;将公司利润分配给股东的一种方式。不同的股东分红模式有着不同的特点和应用场景。 ​一、模式概述 一个私域电商平台&#xff0c;非常重要的一个角色是“团队长”&#xff0c;尤其是能够带动业绩和…

MoE模型性能还能更上一层楼?一次QLoRA微调实践

Fine-Tuning Mixtral 8x7B with QLoRA&#xff1a;Enhancing Model Performance &#x1f680; 编者按&#xff1a;最近&#xff0c;混合专家(Mixture of Experts,MoE)这种模型设计策略展现出了卓越的语言理解能力&#xff0c;如何在此基础上进一步提升 MoE 模型的性能成为业界…

Win10子系统Ubuntu实战(二)

在 Windows 10 中安装 Ubuntu 子系统&#xff08;Windows Subsystem for Linux&#xff0c;简称 WSL&#xff09;有几个主要的用途和好处&#xff1a;Linux 环境的支持、跨平台开发、命令行工具、测试和验证、教育用途。总体而言&#xff0c;WSL 提供了一种将 Windows 和 Linux…

使用python执行系统命令的五种方式

在日常开发中&#xff0c;有时需要在Python脚本中执行系统命令&#xff0c;Python有五种方式来执行系统命令&#xff0c;推荐使用第五种。 python执行系统命令的五种方式 方法1: os.system 这是最简单的方法&#xff0c;适合简单的业务场景&#xff0c;输入为完整命令字符串…

【IP-Adapter】进阶 - 同款人物【2】 ☑

测试模型&#xff1a;###最爱的模型\flat2DAnimerge_v30_2.safetensors [b2c93e7a89] 原图&#xff1a; 加入 control1 [IP-Adapter] 加入 control 2 [OpenPose] 通过openpose骨骼图修改人物动作。 加入 control 3 lineart 加入cotrol3 …

【LV12 DAY13 UART 串口通信】

UART–&#xff08;一种通信协议&#xff09; 通用异步收发器&#xff0c;是一种通用的串行&#xff0c;异步通信总线&#xff0c;该总线有两条数据线&#xff0c;可以实现全双工的发送和接收&#xff0c;在嵌入式系统中常用于主机与辅助设备之间的通信。 波特率 波特率用于描…

1.10 Unity中的数据存储 JSON

一、介绍 Json是最常用也是目前用的比较多的一种&#xff0c;超轻量级&#xff0c;可便捷性使用&#xff0c;平时用到比较多的都是解析Json和往Json中添加数据、修改数据等等JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式&#xff0c;它基于ECMAScr…

Leetcode18-算术三元组的数目(2367)

1、题目 给你一个下标从 0 开始、严格递增 的整数数组 nums 和一个正整数 diff 。如果满足下述全部条件&#xff0c;则三元组 (i, j, k) 就是一个 算术三元组 &#xff1a; i < j < k &#xff0c; nums[j] - nums[i] diff 且 nums[k] - nums[j] diff 返回不同 算术三…

PR-视频去水印

文章目录 前言PR-视频去水印实现示例 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&#xff0c;那欢迎常来啊!!! PR-视频…

python绘制热力图-数据处理-VOC数据类别标签分布及数量统计(附代码)

前言 当你需要统计训练数据中每个类别标签有多少&#xff0c;并且想知道坐标中心分布在图像的位置信息时&#xff0c;你可以利用一下脚本进行计算&#xff01; 步骤 要绘制热力图来分析VOC数据的分布统计&#xff0c;可以按照以下步骤进行&#xff1a; 数据处理&#xff1…