Stream流用法详解

news2024/12/26 23:28:31

文章目录

  • 🐒个人主页
  • 🏅JavaSE系列专栏
    • 📖前言:
    • 🎀什么是Stream流?
      • 🧸流的概念
    • 🐕如何获取流
    • 🐕流的操作
    • 🏅中间操作(返回类型都是流)
      • filter:
      • sorted():
      • distinct:
      • limit(n):
      • skip(n):
      • map():
    • 🏅终端操作
      • forEach:
      • toArray:
      • Min:
      • Max:
      • count:
      • Reduce:
      • anyMatch:
      • allMatch:
      • findFirst:
      • collect:

🐒个人主页

🏅JavaSE系列专栏

📖前言:

本篇博客主要以介绍Stream流用法

🎀什么是Stream流?

我认为Stream流是将数据转为等待加工的流水线序列,经过一系列操作直接处理自己需要的数据。
在这里插入图片描述
Stream 是 Java8 的新特性,它允许你以声明式的方式处理数据集合,可以把
它看作是遍历数据集的高级迭代器。此外与 stream 与 lambada 表达示结合后
编码效率与大大提高,并且可读性更强。

要澄清的是 java8 中的 stream 与 InputStream 和 OutputStream 是完全 不同的概念.

🧸流的概念

简单的定义,就是“从支持数据处理操作的源,生成的元素序列”。
元素列表:和集合一样,流也提供了一个接口,访问特定元素类型的一组有序值。
数据源 :获取数据的源,比如集合。
数据处理操作 :流更偏向于数据处理和计算,比如 filter、map、find、sort 等。
简单来说,我们通过一个集合的 stream 方法获取一个流,然后对流进行一系列流操作,最后再构建成我们需要的数据集合。

🐕如何获取流

使用 Collection 接口下的 stream()

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

使用 Arrays 中的 stream() 方法,将数组转成流

Integer[] nums = new Integer[10];
Stream<Integer> stream = Arrays.stream(nums);

使用 Stream 中的静态方法:of()

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

使用 BufferedReader.lines() 方法,将每行内容转成流

BufferedReader reader=new BufferedReader(new FileReader("stream.txt"));
Stream<String> lineStream = reader.lines();
//以下是流操作

🐕流的操作

可以分为中间操作与终端操作。
在这里插入图片描述在这里插入图片描述

诸如 filter 或者 sort 等中间操作会返回另一个流,进而进行下一步流操作,而终
端操作则是将流关闭,构建新的数据集合对象(也可以不构建)。

🏅中间操作(返回类型都是流)

filter:

过滤流中的某些元素,
在这里插入图片描述

sorted():

自然排序,流中元素需实现 Comparable 接口
在这里插入图片描述

distinct:

去除重复元素
在这里插入图片描述

limit(n):

获取 n 个元素

skip(n):

跳过 n 元素,配合 limit(n)可实现分页
在这里插入图片描述

map():

将其映射成一个新的元素(就是将对象作为键,中的一个属性取出作为值)

🏅终端操作

forEach:

遍历流中的元素
在这里插入图片描述

toArray:

将流中的元素倒入一个数组
在这里插入图片描述

Min:

返回流中元素最小值
在这里插入图片描述

Max:

返回流中元素最大值
在这里插入图片描述

count:

返回流中元素的总个数

Reduce:

所有元素求和
在这里插入图片描述

anyMatch:

接收一个 Predicate 函数,只要流中有一个元素满足条件则返回 true,否则返回 false

allMatch:

接收一个 Predicate 函数,当流中每个元素都符合条件时才返回 true,否则返回 false

findFirst:

返回流中第一个元素

collect:

将流中的元素倒入一个集合,Collection 或 Map
在这里插入图片描述

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

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

相关文章

【strcat函数和strncat函数的对比与模拟实现】

strcat函数和strncat函数的对比与模拟实现 1.strcat函数的介绍 资源来源于cplusplus网站 它的作用是&#xff1a; 将源字符串的副本追加到目标字符串。目标中的结束空字符被源的第一个字符覆盖&#xff0c;并且在由目标中的两个字符串串联形成的新字符串的末尾包含一个空字符…

数据结构之单链表(c++(c语言)通用版)

我们创建一个长度为n的链表时&#xff0c;可以采取头插法创建或者尾插法创建&#xff0c;本篇博客我们采取头插法来创建&#xff0c;&#xff08;作者只学了头插&#xff0c;尾插等以后来补qwq&#xff0c;补上喽)。 头插原理 我们先来画图来看看头插的创建形式把&#xff0c…

《python趣味工具》——酷炫二维码(2):批量定制合适的二维码

今天&#xff0c;我们将学习如何从Excel中提取相应的内容然后批量生成相应的二维码。 文章目录 一、Excel的基本操作&#xff1a;1. Excel的基本结构&#xff1a;2. 安装xlrd模块&#xff1a;3. 读取指定工作表&#xff1a;4. 读取指定内容&#xff1a;Tip:切片读取&#xff1a…

线性代数的学习和整理19,特征值,特征向量,以及引入的正交化矩阵概念(草稿)

目录 1 什么是特征值和特征向量&#xff1f; 1.1 特征值和特征向量这2个概念先放后 1.2 直观定义 1.3 严格定义 2 如何求特征值和特征向量 2.1 方法1&#xff1a;结合图形看&#xff0c;直观方法求 2.1.1 单位矩阵的特征值和特征向量 2.1.2 旋转矩阵 2.2 根据严格定义…

buuctf crypto 【RSA2】解题记录

1.打开文件 2.写脚本 3.16进制转字符串

Ardupilot — AP_OpticalFlow代码梳理

文章目录 前言 1 Copter.cpp 1.1 void Copter::setup() 2 system.cpp 2.1 void Copter::init_ardupilot() 3 sensors.cpp 3.1 void Copter::init_optflow() 3.2 对象optflow说明 4 OpticalFlow.cpp 4.1 void OpticalFlow::init(uint32_t log_bit) 5 AP_OpticalFlow_…

十三、函数式编程(1)

本章概要 新旧对比Lambda 表达式 递归 函数式编程语言操纵代码片段就像操作数据一样容易。 虽然 Java 不是函数式语言&#xff0c;但 Java 8 Lambda 表达式和方法引用 (Method References) 允许你以函数式编程。 在计算机时代早期&#xff0c;内存是稀缺和昂贵的。几乎每个人…

手写Spring:第20章-事务处理

文章目录 一、目标&#xff1a;事务处理二、设计&#xff1a;事务处理2.1 事务单元测试2.2 事务设计 三、实现&#xff1a;事务处理3.1 工程结构3.2 事务管理的核心类图3.3 定义事务注解3.3.1 定义事务注解3.3.2 定义事务接口3.3.3 默认事务定义实现类3.3.4 委托事务定义实现类…

Java 多线程系列Ⅵ(并发编程的六大组件)

JUC 组件 前言一、Callable二、ReentrantLock三、Atomic 原子类四、线程池五、Semaphore六、CountDownLatch 前言 JUC&#xff08;Java.util.concurrent&#xff09;是 Java 标准库中的一个包&#xff0c;它提供了一组并发编程工具&#xff0c;本篇文章就介绍几组常见的 JUC 组…

win10自带wifi共享功能

1、按下【wini】组合键打开windows设置&#xff0c;点击【网络和internet】&#xff1b; 2、按照下图&#xff0c;打开个移动热点&#xff0c;设置名称、密码。

Blender--》页面布局及基本操作讲解

接下来我会在three.js专栏中分享关于3D建模知识的文章&#xff0c;如果学习three朋友并且想了解和学习3D建模&#xff0c;欢迎关注本专栏&#xff0c;关于这款3D建模软件blender的安装&#xff0c;我在前面的文章已经讲解过了&#xff0c;如果不了解的朋友可以去考考古&#xf…

DeepinV20安装MSJDK17

装什么版本的JDK https://learn.microsoft.com/zh-cn/java/openjdk/download#openjdk-17 通常来讲&#xff0c;选择最适应自己应用程序的版本&#xff0c;例如最新开发的程序基本需要运行在jdk17了&#xff0c;又或者前几年的java程序基本都是jdk11,再旧一点的jdk8。尽可能选…

【C++深入浅出】类和对象中篇(六种默认成员函数、运算符重载)

目录 一. 前言 二. 默认成员函数 三. 构造函数 3.1 概念 3.2 特性 四. 析构函数 4.1 概念 4.2 特性 五. 拷贝构造函数 5.1 概念 5.2 特性 六. 运算符重载 6.1 引入 6.2 概念 6.3 注意事项 6.4 重载示例 6.5 赋值运算符重载 6.6 前置和后置运算符重载 七. c…

【Rust日报】2023-09-07 Servo 项目将加入欧洲 Linux 基金会

Servo 项目将加入欧洲 Linux 基金会 Servo 项目由 Mozilla Research 于 2012 年创建&#xff0c;是除编译器本身之外的首个主要 Rust 代码库&#xff0c;自此成为实验性网络引擎设计的标志。Servo 的主要组件已被集成到 Firefox 网络浏览器中&#xff0c;其若干解析器和其他底层…

渗透测试基础之永恒之蓝漏洞复现

渗透测试MS17-010(永恒之蓝)的漏洞复现 目录 渗透测试MS17-010(永恒之蓝)的漏洞复现 目录 前言 思维导图 1,渗透测试 1,1,什么是渗透测试? 1.2,渗透测试的分类: 1.3,渗透测试的流程 1.3.1,前期交互 1.3.2,情报收集 1.3.3,威胁建模 1.3.4,漏洞分析 1.3.5,漏洞验…

软件设计模式(五):代理模式

前言 代理模式是软件设计模式的重中之重&#xff0c;代理模式在实际应用比较多&#xff0c;比如Spring框架中的AOP。在这篇文章中荔枝将会梳理有关静态代理、动态代理的区别以及两种实现动态代理模式的方式。希望能对有需要的小伙伴有帮助~~~ 文章目录 前言 一、静态代理 二…

自定义Dynamics 365实施和发布业务解决方案 - 1. 准备工作

在当前的商业世界中,竞争每时每刻都在加剧每个企业都必须找到在竞争中保持领先的直观方法。其中之一企业面临的主要挑战是在以便为客户提供更好的服务。在这样一个竞争激烈、要求苛刻的时代环境中,对客户关系管理软件的需求是正在增加。 Dynamics 365的CE功能强大且适应性强…

使用JS实现一个简单的观察者模式(Observer)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 手撸Observer⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领…

MySQL数据库——存储引擎(1)-MySQL体系结构、存储引擎简介

目录 MySQL体系结构 连接层 服务层 引擎层 存储层 存储引擎简介 概念 语句 演示 下面开始学习进阶篇的第一个内容——存储引擎 分为四点学习&#xff1a; MySQL体系结构存储引擎简介存储引擎特点存储引擎选择 MySQL体系结构 连接层 最上层是一些客户端和链接服务&am…

小米和金山集团董事长雷军访问武汉:加大投资力度,深化务实合作

小米集团创始人雷军一行在9月6日到访了武汉&#xff0c;受到了当地政府的热情欢迎。武汉方面表示&#xff0c;小米、金山集团作为全球知名的企业集团&#xff0c;与武汉有着良好合作基础。未来&#xff0c;武汉希望小米、金山集团持续深耕武汉&#xff0c;加大投资力度&#xf…