JAVA——Stream流
1.Stream流的作用(流水线)
结合了Lambda表达式,简化集合、数组的操作;
2.Stream流的使用步骤
①先得到一条Stream流(流水线),并将数据放上去;
②利用Stream流中的API进行各种操作;
eg:过滤 转换 【中间方法】:方法调用完毕后还可以调用其他方法;(使用次数较多)
统计 打印 【终结方法】:方法调用完毕后不可以再调用其他方法(一般在最后使用)
③使用终结方法对流水线上的数据进行操作;
3.怎样执行2.①?
获取方式 | 方法名 | 说明 |
单列集合 | default Stream<E> stream() | Collection中的默认方法 |
双列集合 | 需先通过KeySet()orentrySet()转化成单列集合 | ... |
数组 | public static <T> Stream<T>stream(T[]array) | Array工具类中的静态方法 |
一堆零散数据 | public static <T>Stream<T>of(T...values) | Stream接口中的静态方法(数据类型尽量一致) |
代码演示:(单列集合)
import java.util.ArrayList;
import java.util.Collections;
import java.util.stream.Stream;public class Listof {public static void main(String[] args) {ArrayList<String> list=new ArrayList<>();//创建单列集合Collections.addAll(list,"张三","李四","王五","赵六","思思","张小三","张小思");//批量添加//Stream<String> stream=list.stream();//单列集合获取Stream流//过滤出单列集合中名字以”张“开头且长度为三的名称并进行打印list.stream().filter(name->name.startsWith("张")).filter(name->name.length()==3).forEach(name->System.out.println(name));System.out.println("*********************************************");//获取单列集合中名字是两个字的人名并进行打印list.stream().filter(name->name.length()==2).forEach(name->System.out.println(name));}
}
双列集合:
import java.util.*;public class Listof {public static void main(String[] args) {//双列集合HashMap<Integer,String> hm=new HashMap<>();hm.put(1,"妲己");hm.put(2,"小乔");hm.put(3,"安其拉");hm.put(4,"王昭君");hm.put(5,"甄姬");Set<Integer> integers = hm.keySet();integers.stream().forEach(Key-> System.out.println(Key));System.out.println("***********************************");Set<Map.Entry<Integer, String>> entries = hm.entrySet();entries.stream().filter(name->name.getValue().length()==3).forEach(name-> System.out.println(name));}
}
数组,零散数据:
package Deom130;import java.util.Arrays;
import java.util.stream.Stream;public class Listof {public static void main(String[] args) {//数组int []array1={1,2,3,4,5};String []array2={"a","b","c","d","e"};Arrays.stream(array1).forEach(s-> System.out.println(s));System.out.println("****************************");Arrays.stream(array2).forEach(s-> System.out.println(s));System.out.println("****************************");//零散数据Stream.of(1,2,3,4,5).forEach(s-> System.out.println(s));System.out.println("****************************");Stream.of("a","b","c","d","e").forEach(s-> System.out.println(s));}
}
4.Stream流的中间方法(改变的只是流里面的数据,对原本集合中的数据不会有影响)
名称 | 说明 |
Stream<T>filter(Predicate<?super T>predicate | 过滤 |
Stream<T>limit(long maxSize) | 获取前几个元素 limit(3)就是获取前三个元素 |
Stream<T>skip(long n) | 跳过前几个元素 |
Stream<T>distinct() | 去掉重复元素 |
static<T>Stream<T>concat(Stream a,Stream b) | 合并两个流为一个流(两个流上的数据类型尽量保持一致) |
Stream<R>map(Function<T,R> mapper) | 转换流中的数据类型 |
5.Stream流的终结方法
名称 | 说明 |
void forEach(Consumer action) | 遍历 |
long count() | 统计 |
toArray() | 收集流中的数据放到数组中 |
collect(Collector) | 收集流中的数据放到集合中 |
6.案例分析
import java.util.*;
import java.util.stream.Collectors;public class Listof {public static void main(String[] args) {//定义一个集合,存储数据,过滤奇数。留下偶数,并存储到集合中ArrayList<Integer> list1=new ArrayList<>();Collections.addAll(list1,1,2,3,4,5,6,7,8,9,10);List<Integer> collect = list1.stream().filter(s -> s % 2 == 0).collect(Collectors.toList());System.out.println(collect);System.out.println("***********************************");ArrayList<String> list2=new ArrayList<>();Collections.addAll(list2,"张三,23","李四,24","王五,25");Map<String, String> collect1 = list2.stream().filter(s -> Integer.parseInt(s.split(",")[1]) > 24).collect(Collectors.toMap(s -> s.split(",")[0], s -> s.split(",")[1]));System.out.println(collect1);}
}
需求:
有两个集合,分别存储六个演员年龄和姓名,现需男演员只要名字为3个字的前两个人,女演员只要姓杨的并且不要第一个,再将得到的两个集合合并为一个集合并且封装成以一个Actor对象,最后将数据存到集合list中;
实现代码:
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;public class Listof {public static void main(String[] args) {ArrayList<String> list1=new ArrayList<>();Collections.addAll(list1,"蔡坤坤,24","比个耶,23","刘不甜,22","伍仟,24","谷嘉,30","肖梁梁,27");ArrayList<String> list2=new ArrayList<>();Collections.addAll(list2,"赵小影,35","杨颖,36","高圆圆,43","张天天,31","刘诗,35","杨小幂,33");Stream<String> boylimit = list1.stream().filter(s -> s.split(",")[0].length()==3).limit(2);Stream<String> girlskip = list2.stream().filter(s -> s.split(",")[0].startsWith("杨")).skip(1);List<Actor> collect = Stream.concat(boylimit, girlskip).map(s -> new Actor(s.split(",")[0], Integer.parseInt(s.split(",")[1]))).collect(Collectors.toList());System.out.println(collect);}
}
相关文章:
JAVA——Stream流
1.Stream流的作用(流水线) 结合了Lambda表达式,简化集合、数组的操作; 2.Stream流的使用步骤 ①先得到一条Stream流(流水线),并将数据放上去; ②利用Stream流中的API进行各种操作…...

QXlsx Qt操作excel(1)
QXlsx 是一个用于处理Excel文件的开源C库。它允许你在你的C应用程序中读取和写入Microsoft Excel文件(.xlsx格式)。该库支持多种操作,包括创建新的工作簿、读取和写入单元格数据、格式化单元格、以及其他与Excel文件相关的功能。 关于QXlsx的…...

20240131在ubuntu20.04.6下使用whisper不同模式的比对
20240131在ubuntu20.04.6下使用whisper不同模式的比对 2024/1/31 16:07 首先你要有一张NVIDIA的显卡,比如我用的PDD拼多多的二手GTX1080显卡。【并且极其可能是矿卡!】 2、请正确安装好NVIDIA最新的驱动程序和CUDA。可选安装! 3、配置whisper…...

HTTP相关问题
目录 1.从输入URL到页面展示到底发生了什么? 2.HTTP状态码有哪些? 2.1 2XX(成功状态码) 2.2 3XX(重定向状态码) 2.3 4XX(客户端错误状态码) 2.4 5XX(服务端错误状态码) 3.HTTP 请求头中常见的字段有哪些? 4.HTTP和HTTPS有什么区别&…...

闲人闲谈PS之五十三——离散制造中的魔鬼--物料套裁
惯例闲话:最近和老婆大人商议买车事宜,闲人以为会陷入买油车还是电车的纠结,没想到老婆大人无比坚定,买电车。在买车这方面,老婆的想法居然比闲人超前。闲人对车定位在代步工具,2年前,对车还是印…...

Dell服务器iDRAC9忘记密码, 通过RACADM工具不重启 重置密码
系列文章目录 文章目录 系列文章目录前言一、RACADM工具二、linux环境1.解压安装RACADM工具测试RACADM工具重置iDRAC密码 Windows环境 前言 一、RACADM工具 RACADM工具 官网参考信息 https://www.dell.com/support/kbdoc/zh-cn/000126703/%E5%A6%82%E4%BD%95-%E9%87%8D%E7%BD…...
2024年Java架构篇之数据结构与算法面试题
2024年Java实战面试题_java 5 年 面试-CSDN博客 2024年Java架构篇之数据结构与算法面试题 1、判断一个数是否是2的N次方,比如2、4、8、16是6、10不是 1:01、2:10、3:011、4:100、7:0111、8:1000、15:01111、16:10000 if(n&(n-1) 0) 那么n就是2的次方 n > 1...

蓝桥杯刷题day06——平均
1、题目描述 有一个长度为n 的数组(n 是 10 的倍数),每个数ai都是区间 [0,9] 中的整数。 小明发现数组里每种数出现的次数不太平均,而更改第i 个数的代价为bi, 他想更改若干个数的值使得这10 种数出现的次数相等&…...
MySQL分区的优缺点
前言 数据库中的分区技术为处理大规模数据提供了一种有效的手段,通过将数据划分成更小的可管理单元,我们能够提高查询性能、简化数据维护并更灵活地管理存储空间。然而,在采用分区时,我们必须认真考虑分区键的选择和实施细节&…...
2023年度总结
目录 工作读书生活展望 用一百分总结这一年,给自己打80分。 这一年中中常常,坚持踏踏实实走好每一步。 工作 项目上,先后经历了「从库恢复后自动上线」、「主动切换RTO优化」、「MGR高可用统一」,以及高可用稳定性建设等。另外&…...
aspose-words在linux上安装字体
大多数情况下,使用 Aspose.Words 将 DOC 或 DOCX 文档转换为 PDF 格式。如果需要在 Linux 计算机上执行此操作,确保 Aspose.Words 以最佳准确性渲染文档。 最常见的是,需要转换的 DOC 和 DOCX 文档是在 Windows 或 Mac OS 操作系统上使用 Microsoft Word 创建的。因此,DOC…...

SpringBoot实战项目第一天
环境搭建 后端部分需要准备: sql数据库 创建SpringBoot工程,引入对应的依赖(web\mybatis\mysql驱动) 配置文件application.yml中引入mybatis的配置信息 创建包结构,并准备实体类 完成今日开发后项目部分内容如下图示 用户注册于登录部分…...

C# 信号量(Semaphore)详细使用案例
文章目录 简介信号量的工作原理使用场景使用示例其他使用实例1. 数据库连接池管理2. 文件读写同步3. 生产者消费者问题4. 打印任务队列同步5. Web服务器并发请求限制 简介 在C#中,信号量(Semaphore)是.NET框架提供的一个同步类,位…...
《Docker极简教程》--Docker基础--Docker的基本概念
在这篇文章中我们先大致的了解以下Docker的基本概念,在后续的文章中我们会详细的讲解这些概念以及使用。 一、容器(Container) 1.1 容器的定义和特点 容器的定义 容器是一种轻量级、可移植的软件打包技术,用于打包应用及其依赖项和运行环境,…...

【AIGC核心技术剖析】DreamCraft3D一种层次化的3D内容生成方法
DreamCraft3D是一种用于生成高保真、连贯3D对象的层次化3D内容生成方法。它利用2D参考图像引导几何塑造和纹理增强阶段,通过视角相关扩散模型执行得分蒸馏采样,解决了现有方法中存在的一致性问题。使用Bootstrapped Score Distillation来提高纹理&#x…...
新版MQL语言程序设计:外观模式的原理、应用及代码实现
文章目录 一、什么是外观模式二、外观模式的实现原理三、外观模式的应用范围四、外观模式应用实例银行系统的设计量化交易系统的设计 五、外观模式的代码实现 一、什么是外观模式 外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个…...

Docker 搭建mysql 集群(二)
PXC方案 很明显 PXC方案在任何一个节点写入的数据都会同步到其他节点,数据双向同步的(在任何节点上都可以同时读写) 创建MySQL PXC集群 1 安装PXC镜像 docker pull percona/percona-xtradb-cluster:5.7.21 2 为PXC镜像改名 docker tag pe…...

L1-018 大笨钟-java
输入样例1: 19:05输出样例1: DangDangDangDangDangDangDangDang输入样例2: 07:05输出样例2: Only 07:05. Too early to Dang. java import java.awt.desktop.SystemEventListener; import java.util.Scanner;public class M…...

monaco-editor布局篇(二)-自动换行
monaco-editor的换行方式,主要分为3种情况: 不换行按照编辑器宽度换行按照制定列数换行 主要受wordwrap和wordwrapcolumn控制,具体如下: 取值含义off不换行,会一直滚动on换行,文本将在视区宽度内自动换行…...
08-常用集合(容器)
上一篇: 07-使用Package、Crates、Modules管理项目 Rust 的标准库包含许多非常有用的数据结构,称为集合。大多数其他数据类型表示一个特定值,但集合可以包含多个值。与内置的数组和元组类型不同,这些集合指向的数据存储在堆上&…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...