JAVA:浅谈Stream流

news2025/1/17 2:49:32

在阅读本文章之前请了解什么叫  Lambda表达式  以及  如何使用 

一、Stream流

Stream流的使用步骤:

  1. 获得一条Stream流,并且将数据放上去
    1. 单列集合获取Stream流
      // 1. 单列集合获取Stream
      ArrayList<String> list = new ArrayList<String>();
      list.add("a");
      list.add("b");
      // 2. 获取Stream流
      list.stream().forEach(e-> System.out.println(e));
    2. 双列集合获取Stream需要转化为单列集合
      // 1. 双列集合获取Stream
      HashMap<String,Integer> hm = new HashMap<String,Integer>();
      hm.put("a",1);
      hm.put("b",2);
      // 2. 双列集合获取Stream需要转化为单列集合
      //    使用keyset/entryset
      hm.keySet().stream().forEach(key -> System.out.println(key));
    3. 数组获取Steam需要通过Arrays
      // 1. 数组获取Stream流
      int[] arr = {1,2,3,4,5,6,7,8};
      // 2. 数组通过Arrays获取Stream流
      Arrays.stream(arr).forEach(e-> System.out.println(e));
    4. 零散数据通过Stream中的of获取,但是需要零散数据为同种数据类型。如果of传递的是数组,则必须传递引用数据类型的数组,不能是基本数据类型的(八大基本数据类型)
      // 1. 零散数据获取Stream流
      Stream.of(1234).forEach(e-> System.out.println(e));
      // 2. 零散数据获取stream通过of
      //    但是切记零散数据需要这些数据为同种数据类型
      Stream.of("A","B").forEach(e-> System.out.println(e));
  2. 利用Stream流的API操作数据
    •  中间方法:方法调用完成后还可以调用其他中间方法,一般例如:过滤、装换
    •  终结方法:最后一步,不能在调用其他方法,一般例如:统计、 打印     

二、Stream流的中间方法

 2.1 过滤filter

ArrayList<Integer> arr = new ArrayList<Integer>();
Collections.addAll(arr,1,10,16,27,29,29,30,40,50);
// 1. 获取stream流,使用filter过滤大于等于30的数字
arr.stream().filter(e->e<30).forEach(e-> System.out.println(e));

2.2 获取前几个元素limit

ArrayList<Integer> arr = new ArrayList<Integer>();
Collections.addAll(arr,1,10,16,27,29,29,30,40,50);
// 1. 获取stream流,获取前5个元素
arr.stream().limit(5).forEach(e-> System.out.println(e));

 
2.3 跳过前几个元素skip 

ArrayList<Integer> arr = new ArrayList<Integer>();
Collections.addAll(arr,1,10,16,27,29,29,30,40,50);
// 1. 获取stream流,跳过5个元素
arr.stream().skip(5).forEach(e-> System.out.println(e));

2.4 去重distinct

ArrayList<Integer> arr = new ArrayList<Integer>();
Collections.addAll(arr,1,10,16,27,29,29,30,40,50);
// 1. 获取stream流,去重
arr.stream().distinct().forEach(e-> System.out.println(e));

2.5 合并两个流concat

ArrayList<Integer> arr1 = new ArrayList<Integer>();
ArrayList<Integer> arr2 = new ArrayList<Integer>();
Collections.addAll(arr1,1,10,16);
Collections.addAll(arr2,2,10,26);
// 1. 获取stream流,合并去重
Stream.concat(arr1.stream(),arr2.stream())
        .distinct()
        .forEach(e-> System.out.println(e));

2.6 转化流中数据类型map 

ArrayList<String> arr1 = new ArrayList<String>();
Collections.addAll(arr1,"a-1","b-2","c-3","d-4");
// 1. 获取stream流,并且只打印数字 使用map进行类型转化
arr1.stream()
        .map(e->Integer.parseInt(e.split("-")[1]))
        .forEach(e-> System.out.println(e));

 

三、Stream流的终结方法

3.1 遍历forEach

这个没啥好说的,上面中间方法的所有例子的终结方法都是foreach

3.2 统计count

ArrayList<Integer> arr1 = new ArrayList<Integer>();
Collections.addAll(arr1, 1,2,3,4,5,6,7,8,9,10,11);
long count = arr1.stream().count();
System.out.println(count);

3.3 收集到数组中 toArray

ArrayList<String> arr1 = new ArrayList<String>();
Collections.addAll(arr1,"a-1","b-2","c-3","d-4");
// 1. 获取stream流,并且存储到数组中 toArray
// 2. 如果toArry为空参则对象为Object
Object[] objects = arr1.stream().toArray();
System.out.println(Arrays.toString(objects));
// 3. 如果需要转为指定类型的数组则需要传参 参数传递为 个数->需要数组类型【个数】
String[] strings = arr1.stream().toArray(e -> new String[e]);
System.out.println(Arrays.toString(strings));

3.4 收集到集合中collect

ArrayList<String> arr1 = new ArrayList<String>();
Collections.addAll(arr1,"a-1","b-2","c-3","d-4","d-4");
// 1. 获取stream流,并且存储到List集合当中
// .collect(Collectors.toList()) 底层会自动为我们创建list集合
List<String> collect = arr1.stream().collect(Collectors.toList());
// 2. 获取stream流,并且存储到Set集合当中
Set<String> collect1 = arr1.stream().collect(Collectors.toSet());
System.out.println("list:"+collect);
System.out.println("set:"+collect1);

 通过输出我们可以看到,存储在list与set集合中的区别,set会去重

 注意转化list到map的时候 不能有相同的key出现哦!!!!

ArrayList<String> arr1 = new ArrayList<String>();
Collections.addAll(arr1,"a-1","b-2","c-3","d-4");
// 3. 获取stream流,并且存储到map集合当中 a为键 1为值
/*
 tomap:参数1:键的生成规则
       参数2:值的生成规则
 */
Map<String, String> collect2 = arr1.stream()
        .collect(Collectors.toMap(
                e -> e.split("-")[0], //参数1
                e -> e.split("-")[1]  //参数2
        ));
System.out.println("map:"+collect2);

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

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

相关文章

YOLO10:手把手安装教程与使用说明

目录 前言一、YOLO10检测模型二、YOLO安装过程1.新建conda的环境 yolo10安装依赖包测试 总结 前言 v9还没整明白&#xff0c;v10又来了。而且还是打败天下无敌手的存在&#xff0c;连最近很火的RT-DETR都被打败了。那么&#xff0c;笑傲目标检测之林的v10又能持续多久呢&#…

【CTF Web】BUUCTF BUU LFI COURSE 1 Writeup(代码审计+PHP+文件包含漏洞)

BUU LFI COURSE 1 1 点击启动靶机。 解法 <?php /*** Created by PhpStorm.* User: jinzhao* Date: 2019/7/9* Time: 7:07 AM*/highlight_file(__FILE__);if(isset($_GET[file])) {$str $_GET[file];include $_GET[file]; }如果GET请求中接收到file参数&#xff0c;就会…

【vue实战项目】通用管理系统:作业列表

目录 目录 1.前言 2.后端API 3.前端API 4.组件 5.分页 6.封装组件 1.前言 本文是博主前端Vue实战系列中的一篇文章&#xff0c;本系列将会带大家一起从0开始一步步完整的做完一个小项目&#xff0c;让你找到Vue实战的技巧和感觉。 专栏地址&#xff1a; https://blog…

python ---requests

python包管理工具 pip 若发现报错&#xff0c;则可以通过 -i 命令指定软件源 requests库安装 通过 pip &#xff0c;如上 或通过 pycharm 搜索 requests &#xff0c;并安装即可 下载成功的证明 requests库使用 模拟 http 重要参数如下 如何模拟发包 支持模拟各种 http meth…

【机器学习-09】 | Scikit-Learn工具包进阶指南:Scikit-Learn工具包之高斯混合sklearn.mixture模块研究

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

智能监测,无忧续航!Battery Indicator for Mac,让电池状态尽在掌握

Battery Indicator for Mac 是一款设计精良的电池状态监测软件&#xff0c;它极大地增强了Mac用户对电池使用情况的感知和管理能力。 首先&#xff0c;Battery Indicator for Mac 能够实时显示电池电量百分比。这意味着&#xff0c;无论你是在处理文件、浏览网页还是观看视频&…

JL-8B/1111电流继电器 带板前接线附件 约瑟JOSEF

JL-8系列继电器型号&#xff1a; 电流继电器JL-8GB/11 电流继电器JL-8GA/21 过电流继电器JL-8GB/1 电流继电器JL-8B/521DK 电流继电器JL-8B/222DK 电流继电器JL-8B/1121 电流继电器JL-8B/12 电流继电器JL-8B/3211 电流继电器JL-8B/E2 电流继电器JL-8B/E3 过电流继电器JL-…

双向链表的讲解与实现

双向链表的讲解与实现 一、双向链表的结构二、顺序表和双向链表的优缺点分析三、双向链表的实现(使用VS2022)1.初始化、销毁、打印、判空2.尾插尾删、头插头删3.查找、指定插入、指定删除 四、代码优化五、完整 List.c 源代码 一、双向链表的结构 带头”跟前面我们说的“头节点…

DNS解析与Bond

一、DNS 1、DNS概念 DNS是域名系统的简称&#xff1a;域名和ip地址之间的映射关系互联网中IP地址是通信的唯一标识&#xff0c;逻辑地址访问网站&#xff0c;有域名&#xff0c;ip地址不好记&#xff0c;域名朗朗上口&#xff0c;好记。 域名解析的目的&#xff1a;实现访问…

Ivy优化算法-2024年7月SCI一区顶刊新算法!公式原理详解与性能测评 Matlab代码免费获取

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 原理简介 一、初始化 二、协调有序的种群增…

李廉洋:6.5黄金原油亚盘震荡,美盘行情分析及最新策略。

黄金消息面分析&#xff1a;黄金价格周二下跌超过1%&#xff0c;原因是美元在本周晚些时候美国就业数据公布前趋于稳定&#xff0c;该数据可能为美联储的利率策略定下基调。另外&#xff0c;中东达成停火协议的可能性增加&#xff0c;也打压黄金的避险需求。不过&#xff0c;隔…

【Postman接口测试】第五节.Postman接口测试项目实战(下)

文章目录 前言七、课程添加接口postman测试 7.1 课程添加接口文档 7.2 针对课程添加设计接口测试用例 7.2.1 提取测试点 7.2.2 设计测试用例 7.2.2 使用Postman进行接口测试八、查询课程列表接口postman测试 8.1 查询…

七天进阶elasticsearch

elasticSearch 概述 Elasticsearch是一个近实时的搜索平台。这意味着&#xff0c;从索引一个文档直到这个文档能够被搜索到有一个很小的延迟&#xff08;通常是一秒&#xff09; 集群 一个集群就是由一个或多个节点组织在一起&#xff0c; 它们共同持有你全部的数据&#x…

phpstudy配置的站点不能访问了

无法打开站点 打开网站的时候出现如下 没有人为主动去更改配置项&#xff0c;今天就不能正常访问了 检查了一遍配置&#xff0c;发现并无大碍&#xff0c;那就重新配置一遍看看 配置phpstudy 1、新建网站 2、选择项目入口文件夹 3、配置伪静态 4. 确认保存 在我的电脑 C:\…

深入解读Prometheus Adapter:云原生监控的核心组件

一、引言 Prometheus Adapter的背景与重要性 在现代的云原生架构中&#xff0c;微服务和容器化技术得到了广泛的应用。这些技术带来了系统灵活性和扩展性的提升&#xff0c;但同时也增加了系统监控和管理的复杂度。Prometheus作为一款开源的监控系统&#xff0c;因其强大的指标…

回归模型的算法性能评价

一、概述 在一般形式的回归问题中&#xff0c;会得到系列的预测值&#xff0c;它们与真实值&#xff08;ground truth&#xff09;的比较表征了模型的预测能力&#xff0c;为有效量化这种能力&#xff0c;常见的性能评价指标有平均绝对误差&#xff08;MAE&#xff09;、均方误…

Linux网络-守护进程版字典翻译服务器

文章目录 前言一、pid_t setsid(void);二、守护进程翻译字典服务器&#xff08;守护线程版&#xff09;效果图 前言 根据上章所讲的后台进程组和session会话&#xff0c;我们知道如果可以将一个进程放入一个独立的session&#xff0c;可以一定程度上守护该进程。 一、pid_t se…

深度学习——TensorBoard的使用

官方文档torch.utils.tensorboard — PyTorch 2.3 documentation TensorBoard简介 TensorBoard是一个可视化工具&#xff0c;它可以用来展示网络图、张量的指标变化、张量的分布情况等。特别是在训练网络的时候&#xff0c;我们可以设置不同的参数&#xff08;比如&#xff1…

【RISC-V】站在巨人的肩膀上——看开源芯片、软件生态、与先进计算/人工智能/安全的结合

目录 会议议程专题二&#xff1a;RISC-V与先进计算基于RISC-V的后量子密码芯片设计&#xff0c;刘冬生&#xff0c;华中科技大学存算一体集成芯片&#xff0c;刘琦&#xff0c;复旦大学面向端侧大模型计算的RISC-V矩阵扩展架构&#xff0c;复旦大学&#xff0c;韩 军 专题五&am…

HarmonyOS应用开发学习历程(1)初识DevEco Studio

1.create project Bundle name&#xff1a;包名&#xff0c;标识应用程序&#xff0c;默认应用ID也使用该名 Compile SDK&#xff1a;编译时API版本 2.工程目录 AppScope&#xff1a;应用全局所需资源 entry&#xff1a;应用的主模块&#xff0c;含代码、资源 hvigor&#…