Java中Stream流
Java中Stream流
Stream
使用flatMap处理嵌套集合:
有一个对象列表,每个对象又包含一个列表,可以使用flatMap来“展平”这个结构。
List<List<String>> listOfLists = Arrays.asList(Arrays.asList("a", "b"),Arrays.asList("c", "d")
);
List<String> flatList = listOfLists.stream().flatMap(List::stream).collect(Collectors.toList());
使用peek进行调试:
peek方法可以在流的中间操作中插入一个动作,比如打印日志,而不会影响流的最终结果。
List<String> result = list.stream().filter(s -> s.startsWith("a")).peek(System.out::println) // 打印中间结果.map(String::toUpperCase).collect(Collectors.toList());
peek可以用来调试也可以塞对象,不改变流,如果你这个里面有对象,比如xxx.setXXX() 那么也会修改这个对象
使用groupingBy进行分组:
Collectors.groupingBy可以根据某个属性对元素进行分组。
Map<Integer, List<String>> map = list.stream().collect(Collectors.groupingBy(String::length));
使用reduce进行复杂聚合:
reduce方法可以用来执行更复杂的聚合操作,比如连接字符串。
String joined = list.stream().reduce("", (a, b) -> a + ", " + b);
使用IntStream、LongStream和DoubleStream进行基本类型操作
对于基本数据类型(int、long、double),可以使用IntStream、LongStream和DoubleStream来提高性能和内存使用效率。
int sum = IntStream.of(1, 2, 3, 4, 5).sum();
使用Stream.generate和Stream.iterate生成无限流
Stream.generate可以用来创建一个无限流,其中每个元素都是通过一个Supplier函数生成的。
Stream<Double> randoms = Stream.generate(Math::random);
Stream.iterate可以用来创建一个无限流,其中每个元素都是基于前一个元素计算得到的。
Stream<Integer> naturals = Stream.iterate(0, n -> n + 1);
使用Stream.collect的自定义收集器
collect方法非常灵活,可以配合自定义的Collector来实现复杂的收集逻辑。
Collector<T, ?, LinkedList<T>> toLinkedList = Collector.of(LinkedList::new,LinkedList::add,(left, right) -> { left.addAll(right); return left; }
);
List<T> linkedListOfT = stream.collect(toLinkedList);
使用Stream.concat合并两个流
Stream.concat方法可以用来合并两个流。
Stream<String> stream1 = Stream.of("a", "b", "c");
Stream<String> stream2 = Stream.of("d", "e", "f");
Stream<String> combined = Stream.concat(stream1, stream2);
使用Stream.peek进行调试
peek方法可以在流的处理过程中插入一个操作,用于调试。
List<String> result = list.stream().filter(s -> s.startsWith("a")).peek(System.out::println) // 打印中间结果.map(String::toUpperCase).collect(Collectors.toList());
使用Stream.anyMatch, Stream.allMatch, 和 Stream.noneMatch
这三个方法用于对流中的元素进行断言检查。
boolean anyStartsWithA = list.stream().anyMatch(s -> s.startsWith("a"));
boolean allStartsWithA = list.stream().allMatch(s -> s.startsWith("a"));
boolean noneStartsWithZ = list.stream().noneMatch(s -> s.startsWith("z"));
使用Stream.ofNullable处理可能为null的元素
Stream.ofNullable可以用来创建一个元素可能为null的流。
Stream<String> stream = Stream.ofNullable(getNullableValue());
使用flatMap处理多层嵌套结构
当处理多层嵌套的集合时,flatMap可以用来将多层结构“展平”成单个流。
Stream<List<List<String>>> nestedLists = Stream.of(listOfLists);
Stream<String> flatStream = nestedLists.flatMap(List::stream).flatMap(List::stream);
Optional
-
使用
orElseGet延迟加载:
orElseGet提供一个Supplier函数,只有在Optional为空时才调用。Optional<String> optional = Optional.ofNullable(getValue()); String value = optional.orElseGet(() -> computeValue()); -
使用
map和orElse链式处理:
map可以用来转换Optional中的值,如果Optional为空,则可以使用orElse提供默认值。String result = optional.map(String::toUpperCase).orElse("DEFAULT"); -
使用
filter进行条件过滤:
filter方法可以用来检查Optional中的值是否满足特定条件。Optional<String> filtered = optional.filter(s -> s.length() > 5); -
使用
ifPresent执行操作:
如果Optional中有值,ifPresent执行一个操作。optional.ifPresent(System.out::println); -
使用
stream方法:
Optional类有一个stream方法,可以将Optional转换为Stream,这样就可以使用Stream API进行进一步处理。optional.stream().map(String::toUpperCase).forEach(System.out::println);
相关文章:
Java中Stream流
Java中Stream流 Stream 使用flatMap处理嵌套集合: 有一个对象列表,每个对象又包含一个列表,可以使用flatMap来“展平”这个结构。 List<List<String>> listOfLists Arrays.asList(Arrays.asList("a", "b"),Arrays.a…...
纯css实现多行文本右下角最后一行展示全部按钮
未展开全部: 展开全部: 综上演示按钮始终保持在最下方 css代码如下: <div class"info-content"><div class"info-text" :class"!showAll ? mle-hidden : "><span class"show-all"…...
WPF篇(17)-ListBox列表控件+ListView数据列表控件
ListBox列表控件 ListBox是一个列表控件,用于显示条目类的数据,默认每行只能显示一个内容项,当然,我们可以通过修改它的数据模板,来自定义每一行(元素)的数据外观,达到显示更多数据…...
HAProxy 全解析:驾驭网络负载均衡与高可用的强大引擎
一、什么是HAproxy HAProxy是一个免费、开源的高性能TCP/HTTP负载均衡器和代理服务器软件,主要用于实现以下功能 一、负载均衡 多种负载均衡算法支持: 轮询(Round Robin):它依次将请求均匀分配到后端的各个服务器。例…...
陶瓷材质的防静电架空地板越来越受欢迎的原因
目前市面上的陶瓷防静电架空地板主要分为两种:钢基和硫酸钙基。前者是以全钢冲孔裸板作为板基,经粘接、固定整型和灌浆的方式加工而成,后者是以复合硫酸钙板为基材,表面粘接防静电陶瓷砖,四周导电PVC边条封边。近年来陶…...
Mariadb数据库本机无密码登录的问题解决
Mariadb数据库本机无密码登录的问题解决 安装了mariadb后,发现Mariadb本机无密码才能登录 百度了很多文章,发现很多人是因为root的plugin设置的值不正确导致的,unix_socket可以不需要密码,mysql_native_password 是正常的。 解…...
校园外卖平台小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,商家管理,菜品信息管理,菜品分类管理,购买菜品管理,订单信息管理,系统管理 微信端账号功能包括:系统首页&a…...
Python3 第八十一课 -- urllib
目录 一. 前言 二. urllib.request 三. urllib.error 四. urllib.parse 五. urllib.robotparser 一. 前言 Python urllib 库用于操作网页 URL,并对网页的内容进行抓取处理。 本文主要介绍 Python3 的 urllib。 urllib 包 包含以下几个模块: url…...
Vue 3+Vite+Eectron从入门到实战系列之(五)一后台管理登录页
前面已经讲了不少基础知识,这篇开始,我们进行实操,做个后台管理系统,打包成多端的,可安装的桌面app!!其中,登录,退出的提示信息用系统的提示,不使用elemengplus的弹窗提示!ÿ…...
Docker 网络代理配置及防火墙设置指南
Docker 网络代理配置及防火墙设置指南 背景 在某些环境中,服务器无法直接访问外网,需要通过网络代理进行连接。虽然我们通常会在 /etc/environment 或 /etc/profile 等系统配置文件中直接配置代理,但 Docker 命令无法使用这些配置。例如&am…...
基于PostGIS(Postgres)+Node.js实现的xyz瓦片地图服务器
背景介绍 前两天研究GeoServer发布存储在PostGIS中栅格数据,最终目的是想在PostGIS中存储金字塔瓦片,用GeoServer发布,但是最后经过研究不改GeoServer源码的情况下,好像只支持将大图tif存在PostGIS数据库中进行发布,金…...
浙大数据结构慕课课后题(06-图3 六度空间)
题目要求: 输入格式: 输入第1行给出两个正整数,分别表示社交网络图的结点数N(1<N≤103,表示人数)、边数M(≤33N,表示社交关系数)。随后的M行对应M条边,每行给出一对正…...
Windows File Recovery卡在99%怎么解决?实用指南!
为什么会出现“Windows File Recovery卡在99%”的问题? Windows File Recovery(Windows文件恢复)是微软设计的命令行应用程序。它可以帮助用户从健康/损坏/格式化的存储设备中恢复已删除/丢失的文件。 通过输入相关命令,设置源/…...
数据结构之数组
写在前面 看下数组。 1:巴拉巴拉 数组是一种线性数据结构,使用连续的内存空间来存储数据,存储的数据要求有相同的数据类型,并且每个元素占用的内存空间相同。获取元素速度非常快,为O(1)常量时间复杂度,所…...
springboot集成sensitive-word实现敏感词过滤
文章目录 敏感词过滤方案一:正则表达式方案二:基于DFA算法的敏感词过滤工具框架-sensitive-wordspringboot集成sensitive-word步骤一:引入pom步骤二:自定义配置步骤三:自定义敏感词白名单步骤四:核心方法测…...
C++ 之动手写 Reactor 服务器模型(一):网络编程基础复习总结
基础 IP 地址可以在网络环境中唯一标识一台主机。 端口号可以在主机中唯一标识一个进程。 所以在网络环境中唯一标识一个进程可以使用 IP 地址与端口号 Port 。 字节序 TCP/IP协议规定,网络数据流应采用大端字节序。 大端:低地址存高位,…...
qt 在vs2022 报错记录
1,qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed 需要把SSL 相关的库加入进去,如ssleay32.dll,libeay32.dll。 2,在一个文件中已定义,编译器在链接时,在多处报 已在.*…...
【人工智能】TensorFlow和机器学习概述
一、TensorFlow概述 TensorFlow是由Google Brain团队开发的开源机器学习库,用于各种复杂的数学计算,特别是在深度学习领域。以下是对TensorFlow的详细概述: 1. 核心概念 张量(Tensor):TensorFlow中的基本…...
SQLALchemy 的介绍
SQLALchemy 的介绍 基本概述主要特点使用场景安装与配置安装 SQLAlchemy配置 SQLAlchemy示例:使用 SQLite 数据库连接到其他数据库 结论 总结 SQLAlchemy是Python编程语言下的一款开源软件,它提供了SQL工具包及对象关系映射(ORM)工…...
Java虚拟机:运行时内存结构
大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 035 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进…...
从零构建FreeRTOS认知:核心概念与实战框架精讲
1. 认识FreeRTOS:嵌入式系统的"交通指挥官" 第一次接触FreeRTOS时,我盯着文档里那些"任务"、"队列"、"调度器"之类的术语发懵,就像刚拿到驾照就被扔进了早高峰的十字路口。后来才发现,这…...
测试测量工程师必读:从EMC暗室到传感器选型的实战解析
1. 项目概述:一场关于测试测量知识的“周五挑战”又到了周五下午,手头的项目报告写得差不多了,代码也调试得告一段落,是不是感觉大脑需要换个频道放松一下?作为一名在电子工程和测试测量领域摸爬滚打了十几年的老工程师…...
Docker多阶段构建与镜像优化实战
Docker多阶段构建与镜像优化实战:从1GB到50MB的瘦身之旅 🐳 镜像太大?构建太慢?安全隐患太多?本文通过真实 Node.js + Python 项目,手把手教你用多阶段构建把 Docker 镜像从 1GB 压缩到 50MB,附带完整的优化策略和踩坑指南。 一、为什么你的 Docker 镜像这么大? 很多…...
360安全浏览器-很恶心,经常自己绑定安装,有没有什么方法可以阻止安装?
360安全浏览器-很恶心,经常自己绑定安装,有没有什么方法可以阻止安装? 可以阻止360安全浏览器的自动安装,主要通过关闭其推荐功能、彻底卸载关联组件、禁用后台服务及使用系统策略拦截来实现。 一、关闭360软件的推荐安装设置 若已安装360安全卫士或360极速浏览器,需先…...
模拟仿真技术在现代集成电路设计中的挑战与解决方案
1. 模拟仿真技术面临的现代挑战在当今集成电路设计领域,模拟仿真技术正面临前所未有的挑战。随着工艺节点从130nm一路演进到15nm甚至更小尺寸,设计复杂度呈指数级增长。我曾参与过多个采用28nm工艺的混合信号芯片项目,深刻体会到传统SPICE仿真…...
【可口可乐全球设计中心认证流程】:从Prompt工程到DPI输出的12小时高保真印相交付链
更多请点击: https://intelliparadigm.com 第一章:【可口可乐全球设计中心认证流程】:从Prompt工程到DPI输出的12小时高保真印相交付链 可口可乐全球设计中心(Coca-Cola Global Design Hub)采用端到端AI增强型印前认证…...
AI工作流自动化实践:Claude数据同步工具架构与实现
1. 项目概述与核心价值 最近在折腾AI应用集成的时候,发现一个挺有意思的项目,叫 cam901051/claude-sync 。乍一看这个标题,你可能会有点懵,这到底是干嘛的?简单来说,这是一个旨在实现Claude(…...
SEAforth多核芯片在工业控制中的并行处理优势
1. SEAforth芯片架构解析:工业控制的并行革命在工业自动化领域,传统单核MCU正面临越来越严峻的性能瓶颈。我曾参与过一个大型石化厂的温度监测系统改造项目,原系统采用常规ARM处理器,当需要同时处理32路热电偶信号、4路压力传感器…...
魔兽争霸3终极优化指南:12个免费插件让你的经典游戏焕发新生
魔兽争霸3终极优化指南:12个免费插件让你的经典游戏焕发新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑上…...
华为OD机试真题 新系统 2026-05-06 JavaGoC语言 实现【匹配命令行前缀关键字】
目录 题目 思路 Code 题目 给定一组命令行字符串和一个命令前缀,需要找出所有以前缀开头的命令行表达式中,前缀之后的第一个关键字,并将这些关键字按字典序排序后返回。 如果找不到匹配前缀则返回空;匹配出多个相同关键字时只返…...
