news 2026/4/23 12:23:48

283. Java Stream API - 创建一个空的 Stream

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
283. Java Stream API - 创建一个空的 Stream

283. Java Stream API - 创建一个空的 Stream


✅ 什么是空流?

空流(empty stream)就是不包含任何元素的Stream。创建方式非常简单,使用Stream.empty()工厂方法即可。


🧪 示例:创建一个空流

Stream<String>empty=Stream.empty();List<String>strings=empty.toList();System.out.println("strings = "+strings);
输出结果:
strings=[]

就这么简单,一行代码就能创建出一个什么都不包含的流!


💡 空流的使用场景

你可能会问:这有啥用?其实,空流在写可组合代码时非常有用!

以下是几个典型的使用场景:


🎯 场景 1:避免空指针异常(NullPointerException)
List<String>list=null;// 错误写法:会抛出 NPE// list.stream().forEach(System.out::println);// 安全写法:使用 Optional + 空流兜底Stream<String>safeStream=Optional.ofNullable(list).map(List::stream).orElse(Stream.empty());safeStream.forEach(System.out::println);// 什么也不打印,但程序不会挂

🎯 场景 2:流式拼接时动态返回空流

比如你从某个数据源中获取一批数据,有时候会返回空结果,但你仍然想继续拼接或操作后续流:

Stream<String>dbResults=fetchFromDB();// 假设这里可能返回空Stream<String>merged=Stream.concat(dbResults,Stream.of("default"));merged.forEach(System.out::println);

如果fetchFromDB()返回Stream.empty(),也不会出错,你依然能打印出默认值。


🎯 场景 3:在flatMap()中用于“条件跳过”

假设我们在做嵌套数据处理,不满足条件的直接返回空流跳过:

Stream<String>words=Stream.of("apple","banana","pear");Stream<Character>letters=words.flatMap(word->{if(word.length()<5)returnStream.empty();returnword.chars().mapToObj(c->(char)c);});letters.forEach(System.out::println);

输出:

a p p l e b a n a n a

小于5个字符的单词"pear"被跳过了(因为返回的是Stream.empty())。


🚀 Java 16:推荐替代方案 —mapMulti()

Java 16开始,推荐使用mapMulti()来代替flatMap+empty组合,它效率更高、语义更清晰。

示例对比:
List<String>words=List.of("apple","banana","pear");Stream<Character>chars=words.stream().<Character>mapMulti((word,consumer)->{if(word.length()>=5){for(charc:word.toCharArray()){consumer.accept(c);}}});chars.forEach(System.out::println);

作用同上,但避免了返回中间流对象,更加轻量!


🧠 小结

方法用途
Stream.empty()创建一个不包含任何元素的流
用于Optional.orElse()安全处理可能为 null 的集合
用于flatMap在流中“跳过”某些不符合条件的元素
Java 16+ 的mapMulti()推荐替代flatMap+empty的高效方式
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 12:20:21

如何快速掌握AquaCrop-OSPy:农业数据科学家的终极指南

如何快速掌握AquaCrop-OSPy&#xff1a;农业数据科学家的终极指南 【免费下载链接】aquacrop 项目地址: https://gitcode.com/gh_mirrors/aq/aquacrop 想要在农业数据分析领域脱颖而出&#xff1f;AquaCrop-OSPy这个强大的Python作物生长模型将成为你的秘密武器。作为开…

作者头像 李华
网站建设 2026/4/17 12:40:34

Jellyfin弹幕插件完整教程:免费打造互动观影新体验

Jellyfin弹幕插件完整教程&#xff1a;免费打造互动观影新体验 【免费下载链接】jellyfin-danmaku Jellyfin danmaku extension 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-danmaku 想要在Jellyfin媒体服务器上享受B站风格的弹幕互动吗&#xff1f;Jellyfin…

作者头像 李华
网站建设 2026/4/17 13:19:38

讯飞开放平台对比:IndexTTS 2.0免费优势凸显

讯飞开放平台对比&#xff1a;IndexTTS 2.0免费优势凸显 在短视频与虚拟内容爆发的今天&#xff0c;一个看似微小却极其关键的问题正困扰着无数创作者——配音和画面节奏对不上。你精心剪辑的画面&#xff0c;配上AI生成的语音后&#xff0c;总差那么零点几秒&#xff1b;角色…

作者头像 李华
网站建设 2026/4/23 11:30:26

AquaCrop-OSPy实战指南:5个关键步骤让你成为作物生长预测专家

还在为农业决策缺乏数据支撑而烦恼吗&#xff1f;AquaCrop-OSPy作为一款基于Python的开源作物生长模型&#xff0c;正成为现代农业技术爱好者和数据分析师的新宠。这个强大的工具能够模拟土壤-作物-水系统的复杂交互关系&#xff0c;为精准农业提供科学依据。 【免费下载链接】…

作者头像 李华
网站建设 2026/4/19 21:08:16

如何用IndexTTS 2.0实现毫秒级时长控制的影视配音?技术解析

如何用IndexTTS 2.0实现毫秒级时长控制的影视配音&#xff1f;技术解析 在影视剪辑、动画制作或短视频创作中&#xff0c;最让人头疼的问题之一莫过于“音画不同步”。你精心设计的画面节奏&#xff0c;配上AI生成的语音后却总是慢半拍&#xff1b;想让角色情绪随剧情起伏&…

作者头像 李华
网站建设 2026/4/13 19:26:41

终极指南:5分钟掌握flatpickr日期选择器的完整应用技巧

终极指南&#xff1a;5分钟掌握flatpickr日期选择器的完整应用技巧 【免费下载链接】flatpickr 项目地址: https://gitcode.com/gh_mirrors/fla/flatpickr 在当今数据驱动的世界中&#xff0c;时间序列数据的可视化展示已成为数据分析的标配功能。然而&#xff0c;如何…

作者头像 李华