JavaEE企业级开发中常用的Stream流

介绍

在Java编程中,Stream流是Java 8引入的一个重要概念,它提供了一种新的处理集合的方式,可以更加简洁、高效地进行数据操作。Stream流支持各种常见的操作,比如过滤、映射、排序、聚合等,同时也支持并行处理,可以充分利用多核处理器的性能优势。

Stream流通常采用延迟执行的策略,即在调用流操作方法时,并不会立即执行,而是会生成一系列的中间操作对象,这些操作对象会按照声明的顺序组成一个流水线。只有在遇到终止操作时,才会触发实际的计算。中间操作可以是过滤、映射、排序等,而终止操作可以是收集结果、聚合操作等。这种流水线的设计可以将多个操作串联起来,形成一个完整的数据处理流程。

在底层实现上,Java的Stream流通常会使用迭代器、函数式接口、Lambda表达式等技术来实现各种操作。通过合理地利用这些技术,可以实现高效、灵活的数据处理流程。

Stream流和SQL之间有一些相似之处,这主要是因为它们都提供了一种声明式的方式来处理数据

另外他们俩的惰性求值 和 数据流水线 过滤操作都及其类似

使用

流水线

先得到流水线 把数据都放上面去

在利用Stream流中的API进行操作

用集合去调用stream()方法

获得流水线 并把集合里面的数据放到流水线上

链式编程

双列集合

数组

一堆零散数据

静态方法of细节

方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组

但是数组必须是引用数据类型

如果传递基本数据类型,是会把整个数组当做一个元素放到Stream里

我们要做的是把数据放到Stream流里

中间方法

过滤

stream流关闭后不可再使用

优先使用链式编程

获取前几个元素

跳过前几个元素

练习

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        ArrayList<String>list=new ArrayList<>();
        Collections.addAll(list,"张无忌","周正若","赵敏","张强",
                                          "张三丰","张翠山","张良","王二麻子","谢广坤");
        list.stream()
                .skip(3)
                .filter(s ->s.startsWith("张"))
                .forEach(s -> System.out.println(s));
        //"张强","张三丰","张翠山","张良"
    }
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        ArrayList<String>list=new ArrayList<>();
        Collections.addAll(list,"张无忌","周正若","赵敏","张强",
                                          "张三丰","张翠山","张良","王二麻子","谢广坤");
        list.stream()
                .skip(3)
                .limit(4)
                .forEach(s -> System.out.println(s));
        //"张强","张三丰","张翠山","张良"
    }
}

去重

合并

转换流里面的数据类型

map方法

当map方法执行完毕之后,流上的数据就变成了整数

所以在下面的forEach当中

s依次表示流里面的每一个数据

等价于

终结方法

流里面的最后一步

之后就不能再使用流里面的其他方法了

收集方法collect

收集流中的数据,放到集合中

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        Collections.addAll(list,"张无忌-男-25",
                "周正若-女-14","赵敏-女-13","张强-男-20");

        List<String> man=list.stream()
                .filter(s ->"男".equals(s.split("-")[1]))
                .collect(Collectors.toList());
        System.out.println(man);

        Set<String> woman=list.stream()
                .filter(s ->"女".equals(s.split("-")[1]))
                .collect(Collectors.toSet());

    }
}

搜集到HashSet集合里面时

会去掉重复的元素

收集使用了collect这个方法

当收集到Map双列集合里的时候

键和值的规则要分别书写

收集到Map集合中,键是不能重复的

不然就会报错

完整版

转化成lambda表达式

总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue 项目 尚品汇(二)(暂停进行)

一、Home 模块组件拆分 基本流程 先写静态页面 拆分静态组件 获取服务器的数据进行展示 动态业务 &#xff08;一&#xff09;三级联动组件 如果一个组件在很多模块之间都在使用&#xff0c;我们就拆分成成一个全局组件 只需注册一次 在全局的项目都能使用 三级联动在 …

Java:就业市场上的常青树-永远的宠儿

除了兴趣&#xff0c;我们学习编程最主要的目标是找一份好工作&#xff0c;选择合适的编程语言就非常重要了&#xff0c;毕竟选择大于努力&#xff0c;男怕选错行&#xff0c;学编程最怕选错语言。比如&#xff0c;如果你选Perl&#xff0c;那就糟糕了&#xff0c;基本上可以断…

高效备战!2024年陕西省绿色工厂申报条件好处和各地区奖补

什么是绿色工厂&#xff1f; 绿色工厂是制造业的生产单元&#xff0c;是绿色制造的实施主体&#xff0c;属于绿色制造体系的核心支撑单元&#xff0c;侧重于生产过程的绿色化。 通过采用绿色建筑技术建设、改造厂房&#xff0c;预留可再生能源应用场所和设计负荷&#xff0c;…

PyQt5中的事件与信号处理

文章目录 1. 简介1.1事件(Event)1.2 信号(Signal)与槽(Slot)1.3 自定义信号 2. 一个信号与槽的简单示例13. 一个信号与槽的简单示例24. 事件发送者5. 创建自定义信号6. 一个简单计算器 1. 简介 在PyQt5中&#xff0c;事件和信号处理是GUI编程的核心概念。事件是指用户操作或系…

吴恩达机器学习笔记:第 9 周-16推荐系统(Recommender Systems) 16.3-16.4

目录 第 9 周 16、 推荐系统(Recommender Systems)16.3 协同过滤16.4 协同过滤算法 第 9 周 16、 推荐系统(Recommender Systems) 16.3 协同过滤 在之前的基于内容的推荐系统中&#xff0c;对于每一部电影&#xff0c;我们都掌握了可用的特征&#xff0c;使用这些特征训练出了…

codeforce#937 (div4)题解

E. Nearly Shortest Repeating Substring 给出字符串s&#xff0c;是否存在长度为k的字符串多次拼接后得到的字符串与s最多有一位不同 由题意得&#xff0c;k一定是n的因数&#xff0c;所以暴力枚举就好&#xff0c;求出满足 s [ i ] s [ i m o d k ] s[i] s[i \mod k] s[…

C++之初阶模板

个人主页&#xff1a;救赎小恶魔 欢迎大家来到小恶魔频道 好久不见&#xff0c;甚是想念 今天我们要深入讲述C内存管理 目录 引言&#xff1a; 模板 1. 泛型编程 2. 模板函数 2.1函数模板的原理 2.2模板函数的实例化 2.3函数模板的匹配 3.类模板 STL STL 的主要组…

[答疑]关于《评“状态和事件本质相同”》的6个疑问

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 丁绍恒 2024-5-8 16:17 &#xff08;补注&#xff1a;上图摘自https://mp.weixin.qq.com/s/QhAhSdET5psZQEEW6f9KoA&#xff09; 1、您提到“【警戒条件】是一个【表达式】&#xff0…

内网安全综合管理系统是什么 | 好用的那我王安全管理系统有哪些

内网安全综合管理系统是指一种集成终端管理、网络管理、内容管理、资产管理等功能的综合性安全管理系统。它主要对内网上的主机进行统一安全管理&#xff0c;包括对网络主机用户操作实施监督控制&#xff0c;并对主机中的安全软件&#xff08;如主机入侵监测系统、主机防火墙和…

【编程基础】人人都应该懂得递归小知识

文章目录 什么是递归递归和栈尾递归递归和分治归并排序 递归和 什么是递归 下面引用刘汝佳的《算法竞赛入门经典》中对递归的定义&#xff1a; 递归&#xff1a;参见递归。递归&#xff1a;如果你还不理解递归是什么&#xff0c;请参见递归。 递归事实上就是函数直接或间接调…

520送男士内裤给男朋友好吗?五大男士内裤测评种草

相信有很多朋友都选在520这个特殊的日子里为心爱的人挑选一份特别的礼物吧&#xff01;如果送礼给男朋友或老公&#xff0c;一份实用的礼物肯定是最佳选择哦&#xff01;很多男性朋友每条内裤都穿很久&#xff0c;如果给男朋友挑选合适的男士内裤&#xff0c;也是一种关心体贴的…

冯喜运:5.9今日黄金原油最新走势分及盘面操作策略布局

【黄金消息面分析】&#xff1a;周四&#xff08;5月9日&#xff09;亚市早盘&#xff0c;现货黄金窄幅震荡&#xff0c;目前交投于2313美元/盎司附近。金价周三持稳&#xff0c;投资者等待美国数据为美联储可能降息提供线索&#xff0c;地缘局势给金价提供支撑&#xff0c;但美…

利用爬虫解决数据采集难题

文章目录 安装为什么选择 BeautifulSoup 和 requests&#xff1f;安装 BeautifulSoup 和 requests解决安装问题 示例总结 在现代信息时代&#xff0c;数据是企业决策和发展的关键。然而&#xff0c;许多有用的数据分散在网络上&#xff0c;且以各种格式和结构存在&#xff0c;因…

2024年小程序视频怎么下载下来

小程序视频下载工具我已经打包好了&#xff0c;有需要的自己下载 小程序下载工具打包链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1234 --来自百度网盘超级会员V10的分享 1.首先解压好我给大家准备好的压缩包 2.退出微信&#xff0c;电脑右下角进行右键退出…

自适应调节Q和R的自适应UKF(AUKF_QR)的MATLAB程序

简述 基于三维模型的UKF&#xff0c;设计一段时间的输入状态误差较大&#xff0c;此时通过对比预测的状态值与观测值的残差&#xff0c;在相应的情况下自适应调节系统协方差Q和观测协方差R&#xff0c;构成自适应无迹卡尔曼滤波&#xff08;AUKF&#xff09;&#xff0c;与传统…

C语言实战项目---通讯录

项目要实现的内容&#xff1a;能够存放100个人的通讯录程序&#xff0c;能够实现联系人数据的存储&#xff0c;删除&#xff0c;修改&#xff0c;查找&#xff0c;展示联系人的信息。 所需知识&#xff1a;结构体&#xff0c;指针&#xff0c;函数................. 废话不多…

leetcode尊享面试——二叉树(python)

250.统计同值子树 使用dfs深度搜索&#xff0c;同值子树&#xff0c;要满足三个条件&#xff1a; 对于当前节点node&#xff0c;他的左子树血脉纯净&#xff08;为同值子树&#xff09;&#xff0c;右子树血脉纯净&#xff08;为同值子树&#xff09;&#xff0c;node的值等于…

Qt 6.7 正式发布!

本文翻译自&#xff1a;Qt 6.7 Released! 原文作者&#xff1a;Qt Group研发总监Volker Hilsheimer 在最新发布的Qt 6.7版本中&#xff0c;我们大大小小作出了许多改善&#xff0c;以便您在构建现代应用程序和用户体验时能够享受更多乐趣。 部分新增功能已推出了技术预览版&a…

MySQL系列之MySQL 存储引擎

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 往期热门专栏回顾 专栏…

【LeetCode】环形链表I 环形链表II

一、环形链表I 题目 思路 该题使用快慢指针 slow、 fast slow 走一步 &#xff0c;fast 走两步 当fast 走到空 或者 fast的下一个结点为空&#xff0c; 则无环 fast若追上slow &#xff0c; 则有环 结论证明 该思路默认了 &#xff1a; 若存在环形链表 &#xff0c; 无论…