Java中Stream操作
Java中Stream操作
Stream
和 Optional
区别
- 用途不同:Stream 用于处理集合中的元素序列,支持丰富的中间操作和终端操作;Optional 用于表示一个值可能为 null 的情况,提供了一种更优雅的处理方式。
- 数据处理 vs. 容器:Stream 是处理数据流的工具,而 Optional 是一个容器,用于可能缺少值的情况。
- API风格:Stream 使用函数式编程风格进行操作,Optional 提供了对值进行安全处理的函数式方法。
在实际开发中,Stream 和 Optional 经常配合使用,Stream 可能包含 Optional 对象,以处理可能为 null 的元素,从而有效地提高代码的安全性和可读性。
generate
产生随机数字流,会一直输出
Stream<Double> stream = Stream.generate(Math::random);
stream.forEach(System.out::println);
iterate
一直循环添加
Stream<BigInteger> stream = Stream.iterate(BigInteger.ZERO, n -> n.add(BigInteger.ONE));
stream.forEach(System.out::println);
of和limit
// 创建指定长度随机数
List<Double> list = Stream.generate(Math::random).limit(10).toList();
list.forEach(System.out::println);// 创建不好喊任何元素的流
Stream<Object> empty = Stream.empty();
empty.forEach(System.out::println);// 创建一个给定值的流
Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6);
integerStream.forEach(System.out::println);// 使用 ofNullable 创建一个流,如果值为 null 则创建一个空流
Stream<String> stream = Stream.ofNullable("hello");
stream.forEach(System.out::println);
文件流
输入这个文件中的每一行
var lines = Files.lines(Path.of("D:\\Project\\demo\\sharding-sphere5\\service\\src\\test\\java\\cn\\bunny\\stream\\StreamTest.java"));
lines.forEach(System.out::println);lines.close();
带map相关
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);// Map处理数据
var list = numbers.stream().map(number -> number * 2).toList();
System.out.println(list);// 扁平化数据
List<List<Integer>> nestedNumbers = Arrays.asList(Arrays.asList(1, 2, 3),Arrays.asList(4, 5),Arrays.asList(6, 7, 8)
);
System.out.println("原始数据:" + nestedNumbers);
var integerList = nestedNumbers.stream().flatMap(List::stream).toList();
System.out.println(integerList);// 将每个字符串拆分为字符并输出
Stream<String> stream = Stream.of("apple", "banana", "cherry");
List<Object> objectList1 = stream.mapMulti((str, consumer) -> {System.out.println(str);for (char c : str.toCharArray()) {consumer.accept(c);}
}).toList();
System.out.println(objectList1);// 使用 mapMulti 方法处理流中的元素
Stream<Integer> integerStream = Stream.of(1, 2, 3);
var objectList = integerStream.mapMulti((num, consumer) -> {// [1, 1, 4, 8, 9, 27]consumer.accept(num * num);consumer.accept(num * num * num);
}).toList();
System.out.println(objectList);
limit
在需要仅处理流中前几个元素时,可以使用 limit 方法。
Stream<Integer> stream = Stream.iterate(0, i -> i + 1);
Stream<Integer> limit = stream.limit(5);
limit.forEach(System.out::println);
skip
在需要跳过流中的前几个元素后处理后续元素时,可以使用 skip 方法。
Stream<Integer> stream = Stream.iterate(0, i -> i + 1);
Stream<Integer> skip = stream.skip(3);
skip.forEach(System.out::println);
takeWhile
在需要根据条件获取流中开头满足条件的元素时,可以使用 takeWhile 方法。
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);
Stream<Integer> integerStream = stream.takeWhile(num -> num < 4);
integerStream.forEach(System.out::println);
dropWhile
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6);
stream.dropWhile(num -> num < 4).forEach(System.out::println);
concat
在需要将两个流合并成一个流时,可以使用 concat 方法。
Stream<Integer> stream1 = Stream.of(1, 2, 3);
Stream<Integer> stream2 = Stream.of(4, 5, 6);
Stream<Integer> concatenatedStream = Stream.concat(stream1, stream2);
concatenatedStream.forEach(System.out::println);
distinct
在需要从流中去除重复元素时,可以使用 distinct 方法。
Stream<String> stream = Stream.of("apple", "banana", "apple", "orange", "banana");
stream.distinct().forEach(System.out::println);
sorted
默认情况下,sorted 方法会按自然顺序对元素进行升序排序。如果需要降序排序,可以使用 sorted(Comparator.reverseOrder());返回负数是升序
// 当条件是负数时是升序还是降序、相等不变这句话对吗?
// 当使用 sorted 方法时,负数会被认为是比正数更小,所以如果排序条件是负数,它会被放在最前面,因此会是升序排序。
// 相等不变这句话通常是指排序时相等的元素在排序后的顺序不变,这在 Java 中是成立的。
Stream<Integer> stream = Stream.of(3, 1, 4, 1, 5, 9, 2, 6);
stream.sorted().forEach(System.out::println);
peek
在需要在流的处理过程中查看元素但不改变流本身时,可以使用 peek 方法。
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
stream.peek(System.out::println).forEach(integer -> {
}); // 迭代所有元素
stream.close(); // 在所有操作完成后关闭流
max和min
这两个方法用于获取流中的最大值和最小值。它们通常用于包含可比较元素的流。
Stream<Integer> numbers = Stream.of(1, 2, 3, 4, 5);// 获取流中的最大值
Integer max = numbers.max(Integer::compareTo).orElse(0);
System.out.println("Max value: " + max);// 最小值
Stream<Integer> numbers2 = Stream.of(1, 2, 3, 4, 5);
Integer min = numbers2.min(Integer::compareTo).orElse(0);
System.out.println("Min value: " + min);
find
这两个方法用于从流中获取元素。findFirst 返回流中的第一个元素,而 findAny 返回流中的任意一个元素(在并行流中更有用)。
Stream<String> strings = Stream.of("apple", "banana", "cherry");// 找到第一个元素
Optional<String> firstElement = strings.findFirst();
System.out.println("First element: " + firstElement.orElse("No element found"));// 找到任意一个元素
Stream<String> strings2 = Stream.of("apple", "banana", "cherry");
Optional<String> anyElement = strings2.findAny();
System.out.println("Any element: " + anyElement.orElse("No element found"));
Match
anyMatch:判断流中是否至少有一个元素满足条件。
allMatch:判断流中的所有元素是否都满足条件。
noneMatch:判断流中是否所有元素都不满足条件。
// 检查是否有元素大于3
Stream<Integer> numbers = Stream.of(1, 2, 3, 4, 5);
boolean anyGreaterThanThree = numbers.anyMatch(num -> num > 3);
System.out.println("Any number greater than 3: " + anyGreaterThanThree);// 检查是否所有元素都小于10
Stream<Integer> numbers2 = Stream.of(1, 2, 3, 4, 5);
boolean allLessThanTen = numbers2.allMatch(num -> num < 10);
System.out.println("All numbers less than 10: " + allLessThanTen);// 检查是否所有元素都不等于0
Stream<Integer> numbers3 = Stream.of(1, 2, 3, 4, 5);
boolean noneEqualToZero = numbers3.noneMatch(num -> num == 0);
System.out.println("No numbers equal to zero: " + noneEqualToZero);
相关文章:
Java中Stream操作
Java中Stream操作 Stream 和 Optional区别 用途不同:Stream 用于处理集合中的元素序列,支持丰富的中间操作和终端操作;Optional 用于表示一个值可能为 null 的情况,提供了一种更优雅的处理方式。数据处理 vs. 容器:S…...
Spring Boot + MinIO 实现文件的分片上传、秒传、续传功能
文件上传是一个常见的功能需求。然而,传统的文件上传方式在面对大文件或不稳定的网络环境时,可能会出现性能瓶颈和上传失败的问题。为了解决这些问题,分片上传、秒传和续传技术应运而生. 技术选型 Spring Boot:一个快速开发框架,简化了 Spring 应用的搭建和配置。 MinIO:…...
Kafka基本概念,工作流程介绍
1、消息队列与Kafka 1.1、Kafka简介 Kafka使用scala开发,支持多语言客户端(c、java、python、go等) Kafka最先由LinkedIn公司开发,之后成为Apache的顶级项目。 Kafka是一个分布式的、分区化、可复制提交的日志服务 LinkedIn使…...
Golang | Leetcode Golang题解之第306题累加数
题目: 题解: func stringAdd(x, y string) string {res : []byte{}carry, cur : 0, 0for x ! "" || y ! "" || carry ! 0 {cur carryif x ! "" {cur int(x[len(x)-1] - 0)x x[:len(x)-1]}if y ! "" {cur i…...
快速排序(上)
快速排序 前言 快速排序算法是最流行的排序算法,且有充足的理由,因为在大多数情况下,快速排序都是最快的。所以学习快速排序算法十分有必要。当然,既然它这么好,也就不太容易理解。 正文 Hoare版快排 快速排序是Hoare在1962年提出的一种二叉树结构的…...
数据结构-队列
队列对于临时数据的处理也十分有趣,它跟栈一样都是有约束条件的数组。区别在于我们想要按什么顺序去处理数据,而这个顺序当然是要取决于具体的应用场景。 你可以将队列想象成是电影院排队。排在最前面的人会最先离队进入影院。套用到队列上,…...
MySQL:操作符
MySQL 操作符 MySQL 操作符是 MySQL 数据库操作中不可或缺的一部分,它们用于执行各种数据运算、比较、逻辑判断等。 MySQL 中有多种操作符可用于数据查询和筛选 MySQL 所提供的运算符可以直接对表中数据或字段进行运算 MySQL 支持 4 种运算符,分别是&…...
反序列化靶机实战serial(保姆级教程)
一.信息收集 靶机地址下载:https://download.vulnhub.com/serial/serial.zip 打开靶机,在kali虚拟机中进行主机存活探测 可以知道靶机ip地址为192.168.133.171 然后扫描端口 可以发现有一个22端口跟80端口 然后接下来用kali扫描它的目录 可以发现有一…...
【Git】git 从入门到实战系列(一)—— Git 的诞生,Linus 如何在 14 天内编写出 Git?
<> 博客简介:Linux、rtos系统,arm、stm32等芯片,嵌入式高级工程师、面试官、架构师,日常技术干货、个人总结、职场经验分享 <> 公众号:嵌入式技术部落 <> 系列专栏:C/C、Linux、rt…...
com.microsoft.sqlserve r:sqljdbc4:jar:4.0 was not found in......如何解决?
这个错误提示说 com.microsoft.sqlserver:sqljdbc4:jar:4.0 这个依赖无法从 Maven 中央仓库(https://repo.maven.apache.org/maven2)下载,导致项目无法构建。以下是解决该问题的几种方法: 方法一:手动安装依赖 下载 J…...
数据集——鸢尾花介绍和使用
文章目录 一、鸢尾花数据集内容二、使用中常转换DataFrame 一、鸢尾花数据集内容 from sklearn import svm, datasets # 鸢尾花数据 iris datasets.load_iris() print(iris.data) X iris.data[:, :2] # 为便于绘图仅选择2个特征 y iris.target它包含了150个样本,…...
ElasticSearch第4篇(亿级中文数据量 ElasticSearch与Sphinx建索引速度、查询速度、并发性能、实测对比)
经过实测:1.09亿的数据量进行中文检索。ElasticSearch单机的检索性能在0.005~5.6秒之间,此检索速度可满足95%的业务场景(注意:每条ES文档平均65个汉字,数据源取自几千本小说,大部分文档在15~300个汉字之间&…...
过期知识:thinkphp5 使用migrate给现有的数据表新增表字段
个人开发网站记录, 这个文章主要是个以后健忘的我看的. 我在搞我的画笔审核 , 发现数据表的画笔数据在审核驳回的时候还是软删除好一些, 免得用户找不到之前上传的画笔数据, 后期也可以考虑重新显示给用户,让用户可以修改画笔信息重新提交审核. 这个时候想起了…...
前端和Postman调用同一个接口,拿到的数据不一样
1、表现 联调一个List接口,Postman自测得到的ID和前端调用得到的ID,结果不一样。前者结果: 后者结果: 同一份代码、同一个数据库,出现这种错误,大概率是类型转换时出问题了,但检查代码发现&…...
1000W长连接,如何建立和维护?千万用户IM 架构设计
1000W长连接,如何建立和维护?千万用户IM 架构设计 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的架构类/设计类…...
vulhub:Apache解析漏洞CVE-2017-15715
Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个换行解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。 #启动靶机 cd /Vulnhub/vulhub-mast…...
开发中可能会面临的真实问题及处理流程
接口返回数据不符合预期 问题描述:接口返回的数据结构或字段名称与前端预期不符,导致页面展示错误。 处理流程: 检查接口文档:确保前后端约定的接口文档是最新的,并且描述一致。 前后端沟通:与后端开发人员…...
个性化你的生产力工具:待办事项App定制指南
国内外主流的10款待办事项软件对比:PingCode、Worktile、滴答清单、番茄ToDo、Teambition、Todoist、Microsoft To Do、TickTick、Any.do、Trello。 在寻找合适的待办事项软件时,你是否感到选择众多、难以决断?一个好的待办事项工具可以大大提…...
本地部署持续集成工具Jenkins并配置公网地址实现远程自动化构建
文章目录 前言1. 安装Jenkins2. 局域网访问Jenkins3. 安装 cpolar内网穿透软件4. 配置Jenkins公网访问地址5. 公网远程访问Jenkins6. 固定公网地址 前言 本文主要介绍如何在Linux CentOS 7中安装Jenkins并结合cpolar内网穿透工具实现远程访问管理本地部署的Jenkins服务. Jenk…...
【数据结构】了解哈希表,解决哈希冲突,用Java模拟实现哈希桶
哈希表的概念 哈希表(Hash Table)是一种高效的数据结构,用于实现快速的数据存储和检索。它通过将数据映射到一个数组的索引位置,从而能够在平均情况下实现O(1)的时间复杂度进行查找、插入和删除操作。 哈希表的基本概念包括以下…...
qt5 ui转python或C++文件
firstMainWin.ui转换成.py文件,输入以下命令即可 pyuic5 -o firstMainWin.py firstMainwin. ui python -m PyQt5.uic.pyuic Img_ui.ui -o Img_ui.py firstMainWin.ui转换成c文件,输入以下命令即可 uic firstMainWin.ui -o hello.h ##用python转 新建…...
scp命令详解
scp(secure copy)是一个基于 SSH 的命令行工具,用于在不同计算机之间安全地复制文件和目录。scp 提供了在本地和远程主机之间传输文件的简单方法,并且支持加密和认证,确保文件传输的安全性。 基本用法 从本地复制到远…...
算法小白的进阶之路(力扣1~5)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
昇思25天学习打卡营第22天|MindSporeK基于Diffusion扩散模型学习- Diffusion与其他生成模型
Diffusion扩散模型 本文基于Hugging Face:The Annotated Diffusion Model一文翻译迁移而来,同时参考了由浅入深了解Diffusion Model一文。 本教程在Jupyter Notebook上成功运行。如您下载本文档为Python文件,执行Python文件时,请…...
【C++版本】protobuf与gRPC
文章目录 一、Protobuf二、安装以及使用protoc三、gRPC1.Q&A2.学习版rpc3.gRPC压缩算法 参考 一、Protobuf Google Protocol Buffers(protobuf)是一种语言中立、平台中立的序列化协议,旨在高效地将结构化数据进行序列化和反序列化。它主要…...
要抓住国际白银现货行情 以下这几点需要注意
国际白银现货行情最近表现不甚稳定,在七月上旬出现了比较强势的上涨,但随后出现强势的下跌,跌破了30关口。如果我们要抓住国际白银现货行情,那么以下这几点我们就需要注意。 一,建立交易计划,并且按计划执行…...
【计算机毕业设计】720图书馆智能选座系统
🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板ÿ…...
java面向对象重点总结
文章目录 java面向对象重点总结类与实例构造方法方法重载属性与修饰符封装继承多态重构抽象类接口抽象类和接口的区别:集合泛型 java面向对象重点总结 对象是一个自包含的实体,用一组可识别的特性和行为来标识。 面向对象编程,英文叫Object…...
1321:【例6.3】删数问题(Noip1994)
大模拟 #include<bits/stdc.h> using namespace std; int s,len; char c[245]; int main(){cin>>c>>s;//读入高精度数和待删除的数lenstrlen(c);//1、寻找第一个下降序列的转折点,删去//2、如果找不到,意味着全部递增,删…...
使用 Python 中的 ELSER 进行Serverless 语义搜索:探索夏季奥运会历史
作者:来自 Elastic Essodjolo Kahanam 本博客介绍如何使用语义搜索以自然语言表达形式从 Elasticsearch 索引中获取信息。我们将创建一个无服务器 Elasticsearch 项目,将之前的奥运会数据集加载到索引中,使用推理处理器和 ELSER 模型生成推理…...
大连专业手机自适应网站建设/百度开户联系方式
定义重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。例如,如果一个线程写入值到字段 a,然后写入值到字段 b,而且 b 的值不依赖于 a 的值,那么,处理器就能够自由的调整它们的执行顺序&a…...
三牛网络推广/seo综合查询
看redis官网的介绍: redis确实是有事务的,但是和传统的ACID是否相同呢? 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性(Consis…...
网站收藏本站的功能/东莞seo报价
二叉搜索树:把要查找的集合放在树上,实现类似二分查找的效率 尾递归:函数返回时出现递归 因此最好不用递归,改用循环 如果二叉树都只有左儿子,则查找效率也不高,最好让二叉树左右平衡,成为“平…...
从手机上可以做网站吗/青岛网站seo服务
对象状态与一级缓存 状态介绍 hibernate 规定三种状态:瞬时态、持久态、脱管态 状态 瞬时态:transient,session没有缓存对象,数据库也没有对应记录。 OID特点:没有值 持久态:persistent,session…...
wordpress 预览图/商品标题关键词优化
1、环境介绍 操作系统:centos 7.9 elasticsearch版本:7.13.3 2、生成es ca证书 bin/elasticsearch-certutil ca注意:提示输入密码:输入Smtgbk_123(自定义,后面配置文件中用到) 3、生成p12秘钥 bin/elasticsearch-…...
13个实用平面设计网站/怎么注册一个网站
Python实现四边形检测和矫正操作 在图像处理中,四边形检测和矫正是一项重要的任务。本文将介绍如何使用Python实现对图像中四边形的检测和矫正。 首先,我们需要使用Python的OpenCV库来进行图像处理。通过使用OpenCV,我们可以很方便地对图像进行操作。 接下来,我们需要定…...