news 2026/5/1 9:08:32

285. Java Stream API - 通过 Supplier 创建 Stream

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
285. Java Stream API - 通过 Supplier 创建 Stream

文章目录

  • 285. Java Stream API - 通过 Supplier 创建 Stream
      • ✅ 基本概念
      • 🧪 示例代码
        • 💻 输出结果:
      • ⚠️ 小心!这是个无限流!
      • 🎯 正确使用方式:结合 **限制操作(short-circuiting)**
      • 🧠 学习要点
      • 📌 示例:生成时间戳
      • 🧪 小练习题(可做培训互动)
      • 📚 小结

285. Java Stream API - 通过 Supplier 创建 Stream


✅ 基本概念

JavaStream接口提供了两个用于从Supplier(供应者)创建流的工厂方法,其中之一就是:

Stream.generate(Supplier<T>supplier)

这个方法用于生成无限流(infinite stream):每当流需要一个新元素时,Supplier就会被调用一次来“供应”这个元素。


🧪 示例代码

Stream<String>generated=Stream.generate(()->"+");List<String>strings=generated.limit(5L).toList();System.out.println("strings = "+strings);
💻 输出结果:
strings=[+,+,+,+,+]

⚠️ 小心!这是个无限流!

❗ 如果你去掉.limit(5L),这个程序将永远不会停止运行!

Stream<String>generated=Stream.generate(()->"+");generated.forEach(System.out::println);// ❌ 小心,死循环

🚨 它将不停地生成+,直到你的内存耗尽,甚至抛出OutOfMemoryError


🎯 正确使用方式:结合限制操作(short-circuiting)

Stream API中,像limit()这样的操作被称为短路操作(short-circuiting operations)。它的作用是“提前终止流的生成或处理”。

✅ 加上limit(n),我们就可以从无限流中“截取”前n个元素使用。

Stream<Double>randoms=Stream.generate(Math::random);List<Double>topFive=randoms.limit(5).toList();System.out.println(topFive);// 打印 5 个随机数

🧠 学习要点

关键点说明
Stream.generate(...)会创建一个无限的流
必须使用limit()或其他短路操作否则程序会永远运行或耗尽资源
适合生成固定模式、常量、随机数等比如"++++++++"或随机数序列
每次调用都会重新获取一个值这与of(...)Arrays.stream(...)静态集合不同

📌 示例:生成时间戳

Stream<String>timeStream=Stream.generate(()->Instant.now().toString());List<String>timestamps=timeStream.limit(3).toList();System.out.println(timestamps);

输出三个不同时间戳,适合用于日志采样、延迟任务等场景。


🧪 小练习题(可做培训互动)

问:以下代码会输出几个"Hello"

Stream.generate(()->"Hello").limit(3).forEach(System.out::println);

答案:

HelloHelloHello

📚 小结

  • Stream.generate(...)= 无限供应机,每次都生产一个元素。
  • 不加限制操作就是“失控的水龙头 💦”,必须加上.limit().takeWhile()等手段节流。
  • 适合用于生成常量、重复元素、随机值、当前时间等“动态”数据。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 6:50:43

ES教程项目应用:油井远程监控

油井远程监控实战&#xff1a;用 Elasticsearch 打造工业级数据中枢在内蒙古的荒原上&#xff0c;一口油井正悄然发生异常——压力传感器读数连续攀升&#xff0c;但值班人员还在百公里外的调度中心翻阅纸质报表。这样的场景在过去屡见不鲜。而今天&#xff0c;同样的预警信息会…

作者头像 李华
网站建设 2026/5/1 8:59:52

SGMICRO圣邦微 SGM37892AYUDT6G/TR DFN6 LED驱动

特性要点 输入电源电压范围:2.7V至5.5V最大闪光灯驱动电流: 720mA(SGM37892) 1240mA(SGM37892A)闪光超时保护时间:650ms(典型值)闪光灯超时保护计时器可灵活复位&#xff0c;更好支持连拍应用6级调光(SGM37892),8级调光(SGM37892A)闪光灯模式与手电筒模式驱动电流之比约为4:1 *…

作者头像 李华
网站建设 2026/5/1 5:44:59

在线教育题库生成质量控制:Qwen3Guard-Gen-8B保驾护航

在线教育题库生成质量控制&#xff1a;Qwen3Guard-Gen-8B保驾护航 在K12在线教育平台的教研后台&#xff0c;一个看似普通的命题请求正悄然触发整套AI系统&#xff1a; “请根据鲁迅《故乡》节选段落&#xff0c;生成一道适合初中三年级学生的主旨理解题。” 几秒后&#xff…

作者头像 李华
网站建设 2026/5/1 3:47:05

画图像写代码一样快?告别 Visio,Mermaid 保姆级上手指南

前言&#xff1a;为什么你应该放弃拖拽式画图&#xff1f; 作为一名程序员或产品经理&#xff0c;画图几乎是日常工作的刚需。无论是理清业务逻辑的流程图&#xff0c;还是系统交互的时序图&#xff0c;甚至是项目排期的甘特图。 但你是否遇到过这些崩溃瞬间&#xff1a; 排…

作者头像 李华
网站建设 2026/5/1 5:43:01

2026 工作计划 PPT 怎么做更专业?7 款 AI 工具推荐,模板+内容双加速

在忙碌的职场中&#xff0c;每到年末年初&#xff0c;制作工作计划 PPT 就成了众多职场人的“噩梦”。熬夜改报告是常有的事&#xff0c;好不容易搭好的框架&#xff0c;却总感觉内容不够专业、逻辑不够清晰。而且&#xff0c;设计方面也缺乏灵感&#xff0c;不知道怎么配色、排…

作者头像 李华
网站建设 2026/5/1 6:48:57

Keil MDK中ARM Compiler 5.06与旧版本差异对比分析

深入解析Keil MDK中ARM Compiler 5.06的升级之痛与实战应对你有没有遇到过这样的情况&#xff1a;项目稳定运行多年&#xff0c;突然因为编译器版本一升&#xff0c;代码就“炸了”&#xff1f;复位后直接HardFault、浮点运算结果对不上、链接报一堆未定义符号……别怀疑人生&a…

作者头像 李华