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

news2024/11/29 2:53:48

介绍

在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表达式

总结

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

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

相关文章

Go的安装与配置

安装 https://go.dev/dl/ 以Windows上安装为例&#xff1a; 下一步下一步&#xff0c;记住安装位置 安装完成后 win rcmd 键入go version检查是否安装成功 配置 Go 工作区 Go 在组织项目文件方面与其他编程语言不同。 Go 是在工作区的概念下工作的。但是从版本 1.11 开始&…

Dreamweaver 2021 for Mac 激活版:网页设计工具

在追求卓越的网页设计道路上&#xff0c;Dreamweaver 2021 for Mac无疑是您的梦幻之选。这款专为Mac用户打造的网页设计工具&#xff0c;集强大的功能与出色的用户体验于一身。 Dreamweaver 2021支持多种网页标准和技术&#xff0c;让您能够轻松创建符合现代网页设计的作品。其…

RespeakPro对口型数字人使用教程

RespeakPro可以将您的视频与音频生成100%精准对口型的视频。与Respeak差别是效率高效果更好。是自媒体制作数字人视频必备黑科技AI. 支持多国语言音频和唱歌音频对口型! 1&#xff1a;系统要求 软件运行支持32/64位window 10/11系统, 无硬件要求,不用显卡也能快速运行。 2&a…

vue+springboot实现excel批量数据的导入导出

①后端配置端口&#xff1a;修改UserController UserController&#xff1a; package com.example.springboot.controller;import cn.hutool.core.util.StrUtil; import cn.hutool.poi.excel.ExcelReader; import cn.hutool.poi.excel.ExcelUtil; import cn.hutool.poi.excel.…

教大家一键下载1688图片信息

电商图片是商品的视觉身份证&#xff0c;对销量有着决定性影响。它们不仅是展示产品&#xff0c;更是讲述品牌故事&#xff0c;激发情感共鸣的工具。高质量的图片能瞬间吸引顾客目光&#xff0c;准确传达产品细节&#xff0c;建立起顾客的信任与购买意愿。在无法亲身体验商品的…

全自动减压器法二氧化碳气容量测试仪:饮料行业的革新与未来

全自动减压器法二氧化碳气容量测试仪&#xff1a;饮料行业的革新与未来 一、引言 在追求品质与效率的现代饮料生产领域&#xff0c;全自动减压器法二氧化碳气容量测试仪凭借其高精度、高效率及无人工干预的显著优势&#xff0c;正逐渐成为行业的标杆。特别是在碳酸饮料的生产中…

【考古篇】Attension is all you need

Transformer 文章目录 Transformer1. What2. Why3. How3.1 Encoder3.2 Decoder3.3 Attention3.4 Application3.5 Position-wise Feed-Forward Networks(The second sublayer)3.6 Embeddings and Softmax3.7 Positional Encoding3.8 Why Self-Attention 1. What A new simple n…

labview技术交流-字符串数组连接成字符串

应用场景 我们可能需要将一维的字符串数组转换成一整条字符串&#xff0c;然后方便记录在数据库或表格中的一个单元格中。 代码展示 方案一 我们使用for循环完成这样的功能需求&#xff0c;见下图&#xff1a; 这种方案可能相对基础和普通&#xff0c;但是它更方便和易于扩展…

JavaSwing技术实现一个电子表程序

使用JavaSwing技术实现一个简单的电子表盘&#xff0c;如下所示。 下载链接 有兴趣的读者可以点击链接下载&#xff0c;博主承诺绝对真实有效。

PyQt5中的事件与信号处理

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

2024年数维杯数维杯数学建模A题思路+论文+代码+结果

A 题 多源机会信号建模与导航分析 尽管全球卫星定位系统下的定位导航技术已成熟&#xff0c;但考虑到室内、 隧道、建筑密集区等复杂环境或全球卫星定位系统被毁失灵等突发场 景&#xff0c;会发生全球卫星定位系统拒止情况&#xff0c;无法有效定位导航。因此&#xff0c; 需要…

Coze扣子开发指南:用免费API自己创建插件

虽然Coze扣子现在插件商店已经有几百个插件了&#xff0c;但相对于海量人群的众多差异化需求&#xff0c;还是远远不够的。如果插件商店没有合适的插件&#xff0c;其实完成可以自己创建&#xff0c;过程也很简单&#xff0c;不需要编写任何代码。 首先打开个人空间&#xff0…

JavaSwing课程设计-实现一个计算器程序

通过JavaSwing技术来实现计算器小程序&#xff0c;效果如下。 源码下载链接 源码下载 博主承诺真实有效&#xff0c;私信可提供支持

Linux系统搭建Gitlab开源仓库管理系统并实现公网环境访问本地私有库

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xf…

内网渗透windows命令绕过

①选项字符替换 有一些命令是unix移植来的,可以使用-&#xff08;横短线&#xff09;&#xff0c;Windows原生选项连接符为/&#xff08;正斜杠&#xff09; 例&#xff1a; ping -h ping /h 像 find之类的命令无法兼容- windows中打开文件,支持直接打开和\.(反斜杠)点的形…

Spark云计算平台Databricks使用,第一个Spark应用程序WordCount

1 上传文件 上传words.txt文件&#xff1a;Spark云计算平台Databricks使用&#xff0c;上传文件-CSDN博客 上传的文件的路径是/FileStore/tables/words.txt&#xff0c;保存在AWS的S3 hello world hello hadoop hello world hello databricks hadoop hive hbase yarn spark …

ESP32-C3模组上跑通MQTT(3)

接前一篇文章&#xff1a;ESP32-C3模组上跑通MQTT&#xff08;2&#xff09; 本文内容参考&#xff1a; 《ESP32-C3 物联网工程开发实战》 MQTT协议及使用_mqtt endpoint-CSDN博客 你不得不看的图文并茂的MQTT协议通信过程&#xff01;&#xff01;&#xff01;_mqtt流程图-…

Linux(centos)安装 MySQL 8 数据库(图文详细教程)

前言 前几天写了个window系统下安装Mysql的博客&#xff0c;收到很多小伙伴私信需要Linux下安装Mysql的教程&#xff0c;今天这边和大家分享一下&#xff0c;话不多说&#xff0c;看教程。 一、删除以前安装的MySQL服务 一般安装程序第一步都需要清除之前的安装痕迹&#xff…

EPAI手绘建模APP分析、灯光、相机

(13) 分析 标题 图 280 分析工具栏-1 标题 图 281 分析工具栏-2 ① 分析工具栏包括测量、信息、标注、注释、分析功能。 ② 测量顶点、角度、半径、直径、距离、长度、面积、体积。 标题 图 282 测量顶点 标题 图 283 测量角度 标题 图 284 测量半径 标题 图 285 测量直径 标…

LeNet-5上手敲代码

LeNet-5 LeNet-5由Yann LeCun在1998年提出&#xff0c;旨在解决手写数字识别问题&#xff0c;被认为是卷积神经网络的开创性工作之一。该网络是第一个被广泛应用于数字图像识别的神经网络之一&#xff0c;也是深度学习领域的里程碑之一。 LeNet-5的整体架构&#xff1a; 总体…