news 2026/7/13 20:04:54

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/7/11 22:34:25

用FREE-H技术快速构建智能客服原型

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 使用FREE-H技术开发一个智能客服系统原型。系统应支持自然语言处理&#xff0c;自动回答用户问题&#xff0c;并记录交互数据以供分析。快速验证核心功能&#xff0c;便于后续迭代…

作者头像 李华
网站建设 2026/7/10 12:44:23

比手动调试快10倍:AI自动化处理Postman错误

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个Postman错误效率对比工具&#xff0c;功能包括&#xff1a;1) 模拟传统手动调试流程&#xff08;控制组&#xff09;&#xff1b;2) AI自动化诊断流程&#xff08;实验组&…

作者头像 李华
网站建设 2026/7/1 9:25:07

吐血推荐8个AI论文写作软件,MBA论文写作必备!

吐血推荐8个AI论文写作软件&#xff0c;MBA论文写作必备&#xff01; AI 工具如何助力 MBA 论文写作&#xff1f; 在当前的学术环境中&#xff0c;MBA 学生和研究者面临着越来越高的论文写作要求。无论是案例分析、商业计划书还是实证研究&#xff0c;都需要严谨的逻辑结构与高…

作者头像 李华
网站建设 2026/7/6 11:46:10

2025年模温机厂家排行榜:控温精准的模温机厂家

模温机&#xff1a;精准控温背后的卓越厂家在现代工业领域&#xff0c;模温机的重要性不言而喻。它就像一个默默掌控温度的大师&#xff0c;确保各种生产过程中的温度精确性。模温机的应用场景极为广泛。在化工行业&#xff0c;许多化学反应都对温度有着严格的要求。比如在一些…

作者头像 李华
网站建设 2026/7/11 2:52:09

基于STM32设计的环境检测系统(OneNet)_365

文章目录 一、前言 1.1 项目介绍 【1】项目开发背景 【2】设计实现的功能 【3】项目硬件模块组成 【4】设计意义 【5】国内外研究现状 【6】摘要 1.2 设计思路 1.3 系统功能总结 1.4 开发工具的选择 【1】设备端开发 【2】物联网平台开发 1.5 参考文献 1.6 系统框架图 1.7 系统…

作者头像 李华
网站建设 2026/7/6 16:47:25

CSS父选择器::has()伪类的强大功能解析

CSS父选择器&#xff1a;:has()伪类的强大功能解析 在CSS发展历程中&#xff0c;长期存在的核心限制之一是单向选择机制——开发者只能通过后代选择器&#xff08;如div p&#xff09;向下选择元素&#xff0c;却无法根据子元素或兄弟元素的状态反向影响父元素样式。这种局限性…

作者头像 李华