当前位置: 首页 > news >正文

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的高效方式
http://www.jsqmd.com/news/197929/

相关文章:

  • AI伦理:企业如何构建负责任的人工智能系统
  • Botty终极指南:暗黑破坏神2重制版全自动运行解决方案
  • 2026年山东墓碑雕刻机公司推荐榜单 - 2025年品牌推荐榜
  • Trello看板升级:IndexTTS 2.0为卡片添加语音说明
  • 深度剖析:程锦海运搬家,靠谱好用性价比之选 - myqiye
  • 水处理与电缆用氧化镁供应商推荐,哪家靠谱又好用? - 工业推荐榜
  • Redis缓存机制优化IndexTTS 2.0高频请求响应速度
  • Niquests,一个全新的 request
  • Notion知识库增强:嵌入IndexTTS 2.0语音笔记功能
  • Playnite游戏库管理工具:如何快速整合多平台游戏的终极指南
  • PDF Craft:重新定义文档格式转换的智能体验
  • 企业AI智能体官网:技术、经验与收益的之选 - 工业品网
  • Java量化交易终极指南:Ta4j技术分析库实战技巧
  • 如何用IndexTTS 2.0实现毫秒级时长控制的影视配音?技术解析
  • 宁波靠谱绿植租赁公司推荐:短租与别墅租赁之选 - 工业品牌热点
  • MoeKoeMusic纯净音乐播放器:告别广告困扰,拥抱二次元音乐新体验
  • 零膨胀数据必须用混合模型吗?:R中5种替代方案及适用场景分析
  • 混合效应模型实战案例全公开:基于R语言的多层次数据分析方法
  • 2025年路面步道板厂家推荐榜:哈尔滨钧楚建材,防滑/彩色/透水/水泥步道板全系供应 - 品牌推荐官
  • Microsoft Teams集成:IndexTTS 2.0提升远程沟通效率
  • 【数据科学家私藏技法】:R中k折交叉验证优化模型的7种方法
  • 2025年湖南青少年心理咨询机构推荐榜:心理咨询医生/心理咨询辅导/儿童心理咨询/学生心理咨询机构精选 - 品牌推荐官
  • 高精度工业温湿度传感器的核心能力解析:不只是“测温测湿”
  • 跨境发薪服务商怎么选?靠谱机构看这里 - 工业设备
  • 化工园区气象站
  • 探究重庆苗品记茶馆:口碑背后的魅力与优势 - mypinpai
  • 数据探索第一步就错?R语言描述统计权威操作手册
  • 2026年电子疲劳试验机批发厂家权威推荐榜单:耐久疲劳试验机/弹簧压力试验机/万能材料试验机/弹簧试验机/拉压疲劳试验机源头厂家精选 - 品牌推荐官
  • 白酒与食品包装盒的选购指南:行业优势、品牌推荐与价格分析 - 工业设备
  • k折交叉验证在R中的高级应用,90%数据分析师忽略的2个致命错误