Java-----Stream

前言:

Stream流是Java 8引入的功能,用于高效处理数据集合。它提供了丰富的操作方法,如过滤、映射、排序等,以简洁的方式处理数据。Stream流具有流式操作、懒执行和内部迭代的特点,能够简化代码并提高可读性。在接下来的文章中,我们将深入探讨Stream流的用法,包括创建流、筛选、转换和聚合操作等。通过学习Stream流,我们可以更好地利用Java的函数式编程特性,写出更加优雅和高效的程序

作者建议:学习知识在于深度理解,多动手、多动脑,总能更快地领悟。不要仅仅停留在阅读代码的层面,亲自动手敲打一遍,会带来更丰富的收获。通过实践,我们能够更深入地理解知识,掌握技能,并且在解决问题时更加得心应手。相信自己的能力,坚持不懈地实践,你将会取得更大的进步和成就。让学习成为一种习惯,让动手实践成为你提升的捷径,加油!你是最棒的!

目录

Stream流概论

Sream的操作

stream流创建

Stream的使用

中间操作:

终端操作


Stream流概论

   Stream是Java8的新特性,Stream用来处理集合(数组,集合类),对数组,集合类 进行各种操作过(过滤,排序....)

   Stream处理数据大体过程

       数组/集合类  --->  流  ----> 各种操作(过滤,排序) ---->结果(数组/集合类)

       数组集合类 更偏向与存储数据(各种结构)

       Stream中偏向于数据的操作(处理数据)

   什么是流

     简单的定义,就是"从支持数据操作的源,生成的元素序列"

理解:流我们可以简单理解为一个流水线工程,每一个岗位又不同的工作作用(流操作,也就是不同的方法),将这些流水线工程拼接在一起也就成为了一个商品(结果,我们所需要的).

流的大致操作:从一个数据源中获取数据,然后将数据源通过Stream流方法变成一个流,然后调取不同的方法,得到最终的结果

Sream的操作

stream流创建

  1. 最常用Stream方法(集合类常用)
  2. 静态的Stream.of()
  3. 数组流的创建Arrays.stream(数组对象);

代码示例:

        ArrayList<String> arrayList = new ArrayList<>();arrayList.stream(); // 这样就把一个集合变成一个流,集合微数据源Stream<Integer> stream = Stream.of(1, 2, 3); // 返回的是一个数据流 并且拥有泛型int[] arr = new int[10];Arrays.stream(arr); //返回的是一个数据流

Stream的使用

Stream流接口可以分为二类:一类中间操作 一类终端操作

中间操作:会返回一个流,通过这种将一个个流连接到一起,这样就会形成一个流链条,从而满足我们的需求.最后通过终端操作,返回结果.(简单的理解:中间操作就是 流的各种数据处理)

终端操作:返回一个具体的流结果.(数组/集合/单值)

中间操作:

  1. filter:过滤流中的某些元素,
  2. sorted(): 自然排序,流中元素需实现Comparable接口
  3. distinct: 去除重复元素
  4. limit(n): 获取 n 个元素
  5. skip(n): 跳过 n 元素,配合limit(n)可实现分页
  6. map(): 将其映射成一个新的元素

代码示例:

filter:过滤流中的某些元素,

        ArrayList<Integer> arrayList = new ArrayList<>();arrayList.add(1);arrayList.add(2);arrayList.add(3);arrayList.add(4);arrayList.add(3);arrayList.add(4);arrayList.add(5);arrayList.stream().filter(num -> num >= 3).forEach(System.out::println);

结果

3
4
3
4
5

 sorted(): 自然排序,流中元素需实现Comparable接口

        arrayList.stream().sorted().forEach(System.out::println); //默认升序System.out.println("-----------------");arrayList.stream().sorted((a, b) -> {return b-a;}).forEach(System.out::println);

  结果

1
2
3
3
4
4
5
-----------------
5
4
4
3
3
2
1

终端操作

  1. forEach: 遍历流中的元素
  2. toArray:将流中的元素倒入一个数组
  3. Min:返回流中元素最小值
  4. Max:返回流中元素最大值
  5. count:返回流中元素的总个数
  6. Reduce:所有元素求和
  7. anyMatch:接收一个 Predicate 函数,只要流中有一个元素满足条件则返 回true,否则返回false
  8. allMatch:接收一个 Predicate 函数,当流中每个元素都符合条件时才返 回true,否则返回false
  9. findFirst:返回流中第一个元素
  10. collect:将流中的元素倒入一个集合,Collection或Map
        Integer[] arr = new Integer[]{1, 2, 3, 3, 4, 5};Integer max = Arrays.stream(arr).distinct().max((a, b) -> {return a - b;}).get();Integer min = Arrays.stream(arr).distinct().min((a, b) -> {return a - b;}).get();Boolean aBoolean = Arrays.stream(arr).distinct().allMatch(a -> a > 3);long num = Arrays.stream(arr).distinct().count();System.out.println(num);Integer sum = Arrays.stream(arr).distinct().reduce((a, b) -> {return a + b;}).get();

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

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

相关文章

高仿百度网页(附带源码)

高仿百度网页 效果图部分源码及素材领取源码下期更新预报 效果图 部分源码及素材 <script language"javascript">function show_date_time() {window.setTimeout("show_date_time()", 1000);BirthDay new Date("1/20/2023 16:52:21");//…

OpenMV学习笔记1——IDE安装与起步

目录 一、OpenMV IDE下载 二、OpenMV界面 三、Hello World&#xff01; 四、将代码烧录到OpenMV实现脱机运行 五、插SD卡&#xff08;为什么买的时候没送&#xff1f;&#xff09; 一、OpenMV IDE下载 浏览器搜索OpenMV官网&#xff0c;进入后点击“立即下载”&#xff0…

nodejs实现生成加密zip压缩包,封装成一个vite插件

实现生成加密zip压缩包的nodejs脚本 pnpm i -D archiver archiver-zip-encryptedconst { cwd } require("node:process"); const path require("path"); const fs require("fs-extra"); const archiver require("archiver");// 检…

C++进阶:C++11(列表初始化、右值引用与移动构造移动赋值、可变参数模版...Args、lambda表达式、function包装器)

C进阶&#xff1a;C11(列表初始化、右值引用与移动构造移动赋值、可变参数模版…Args、lambda表达式、function包装器) 今天接着进行语法方面知识点的讲解 文章目录 1.统一的列表初始化1.1&#xff5b;&#xff5d;初始化1.2 initializer_listpair的补充 2.声明相关关键字2.1a…

python实现对应分析的随笔记

文档来源&#xff1a; Correspondence analysis 1 对应分析 参考&#xff1a; SPSS&#xff08;十二&#xff09;SPSS对应分析&#xff08;图文数据集&#xff09;案例6&#xff1a;SPSS–对应分析10 对应分析 对应分析的实质&#xff08;理论很复杂&#xff0c;但是结果很明…

os.path 提供用于处理文件路径和文件的系统函数

在Python中&#xff0c;os.path模块提供了一系列用于处理文件路径和文件的系统函数。 获取文件路径信息 os.path.abspath(): 获取文件的绝对路径。os.path.dirname(): 获取文件路径的目录名。os.path.basename(): 获取文件路径的文件名。os.path.split(): 分割路径为目录和文件…

创新指南|利用电商产品视频进行渠道营销的最佳策略,不断提升销售额

无论企业的利基市场如何&#xff0c;电商产品视频都已被证明是非常可靠的资产&#xff0c;可以让目标受众了解您所提供的产品——关键功能、展示重要的差异化优势甚至改变大多数营销活动的游戏规则。阅读本文&#xff0c;全面了解电商产品视频如何融入营销推广&#xff0c;以最…

基于python向量机算法的数据分析与预测

3.1 数据来源信息 该数据集来源于Kaggle网站&#xff0c;数据集中包含了罗平菜籽油的销售数据&#xff0c;每行数据对应一条记录&#xff0c;记录了罗平菜籽油销售数据。其中&#xff0c;菜籽产量、菜籽价格和菜籽油价格是数值型数据&#xff0c;共2486条数据。 通过读取Exce…

SpringBootWeb 篇-深入了解 Mybatis 概念、数据库连接池、环境配置和 Lombok 工具包

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文件目录 1.0 Mybatis 概述 2.0 数据库连接池 2.1 数据库连接池的主要作用包括 2.2 如何切换数据库连接池&#xff1f; 3.0 配置环境 4.0 Lombok 工具包 4.1 如何导入到项目中呢…

Transformer详解(3)-多头自注意力机制

attention multi-head attention pytorch代码实现 import math import torch from torch import nn import torch.nn.functional as Fclass MultiHeadAttention(nn.Module):def __init__(self, heads8, d_model128, droput0.1):super().__init__()self.d_model d_model # 12…

比较含退格的字符串-力扣

做这道题时出现了许多问题 第一次做题思路是使用双指针去解决&#xff0c;快慢指针遇到字母则前进&#xff0c;遇到 # 则慢指针退1&#xff0c;最开始并未考虑到 slowindex < 0 ,从而导致越界。第二个问题在于&#xff0c;在最后判断两个字符串是否相同时&#xff0c;最初使…

力扣HOT100 - 31. 下一个排列

解题思路&#xff1a; 数字是逐步增大的 步骤如下&#xff1a; class Solution {public void nextPermutation(int[] nums) {int i nums.length - 2;while (i > 0 && nums[i] > nums[i 1]) i--;if (i > 0) {int j nums.length - 1;while (j > 0 &&…

Linux中“用户管理”

我们linux中是靠用户登陆的&#xff0c;每一个用户都是唯一的&#xff0c;不可重复的&#xff0c;也是标识2计算机上的资源归属&#xff0c;那么它Linux中关联什么作用我们详细了解一下&#xff1a; 一、了解用户 &#xff08;1&#xff09;保存用户的位置 保存账号和密码的数…

Tina-Linux -- 5. 网络通信(有线网络,无线网络,SSH链接)

有线网络 bash 指令 ifconfig eth0 192.168.2.222 netmask 255.255.255.0 up route add default gw 192.168.2.1开机自启 修改网络设置文件 /etc/init.d/S40network #!/bin/sh # # Start the network.... ## Debian ifupdown needs the /run/network lock directory mkdir …

视频码流分析工具

一、VQ Analyzer 在线使用说明&#xff1a; https://vicuesoft.com/vq-analyzer/userguide/ ref&#xff1a; Video Analyzer and Streaming Tester Software – VQ Analyzer HEVC 分析工具 - 懒人李冰 推荐一个开源且跨平台的免费码流分析软件YUView - 知乎

企业管理咨询在当前市场环境下的基本现状

随着全球经济的深度融合和数字化转型的加速推进&#xff0c;企业对于高效、专业的管理咨询服务的需求日益旺盛。那么&#xff0c;企业管理咨询在当前市场环境下究竟呈现出了怎样的基本现状呢&#xff1f; 首先&#xff0c;从市场规模来看&#xff0c;企业管理咨询行业正在持续扩…

网络设备的优势

网络设备在构建和维护高效、安全、可靠的网络环境中发挥着至关重要的作用。它们的功能多样&#xff0c;涉及数据传输、连接、安全、管理等多个方面。接下来&#xff0c;我们将深入探讨几种常见网络设备的优势及其应用场景。 交换机&#xff08;Switch&#xff09; 交换机主要…

寻找峰值 ---- 二分查找

题目链接 题目: 分析: 因为题目中要找的是任意一个峰值即可, 所以和<山脉数组的峰值索引>这道题差不多因为峰值左右都小于峰值, 所以具有"二段性", 可以使用二分查找算法如果nums[mid] < nums[mid 1], mid一定不是峰值, 所以left mid 1如果nums[mid] &…

自主创新助力科技强军,麒麟信安闪耀第九届军博会

由中国指挥与控制学会主办的中国指挥控制大会暨第九届北京军博会于5月17日-19日在北京国家会议中心盛大开展&#xff0c;政府、军队、武警、公安、交通、人防、航天、航空、兵器、船舶、电科集团等从事国防军工技术与产业领域的30000多名代表到场参加。 麒麟信安作为国产化方案…

重学java 42.多线程 等待唤醒机制案例分析

Strength is built under a heavy load,I am expecting to pick up all of my loads and travel on. —— 24.5.24 章节重点 1.会用wait和notify两个方法 2.会使用Lock锁对象 3.会利用Cal1able接口实现多线程 4.会使用线程池完成多线程 等待唤醒案例分析&#xff08;线程之间的…