282. Java Stream API - 从 Collection 或 Iterator 创建 Stream

282. Java Stream API - 从 Collection 或 Iterator 创建 Stream


✅ 一、从 Collection 创建 Stream(最常见方式)

这是最常见、最推荐的方式。

List<String> list = List.of("Java", "Python", "Go");
Stream<String> stream = list.stream();

几乎所有实现了 Collection 接口的容器(如 List、Set)都可以这样创建流。


🧩 二、Map 没有 stream(),那怎么办?

Map 接口不直接提供 stream() 方法,但它提供了三个间接路径:

想处理什么 使用的方法 示例代码
处理键 map.keySet().stream()
处理值 map.values().stream()
处理键值对 map.entrySet().stream() ✅ 最常用!

📌 示例:打印 Map 中的键值对

Map<String, Integer> scores = Map.of("Alice", 90, "Bob", 85, "Charlie", 95);

scores.entrySet().stream()
      .filter(e -> e.getValue() > 90)
      .forEach(e -> System.out.println(e.getKey() + " got " + e.getValue()));

输出:

Charlie got 95

🧵 三、从 Iterator 创建 Stream(进阶用法)

Iterator 是一种轻量级的数据访问方式。虽然不能直接转为 Stream,但 Java 提供了一种“桥接”模式:

🧙 模式结构:

Iterator<T> → Spliterator<T> → Stream<T>

🧪 示例:从自定义 Iterator 创建 Stream

Iterator<Integer> iterator = new Iterator<>() {
    private int index = 0;
    public boolean hasNext() {
        return index < 10;
    }
    public Integer next() {
        return index++;
    }
};

long estimateSize = 10L; // 估计元素数量
int characteristics = 0; // 特性(稍后讲)
Spliterator<Integer> spliterator = Spliterators.spliterator(iterator, estimateSize, characteristics);

boolean parallel = false;
Stream<Integer> stream = StreamSupport.stream(spliterator, parallel);

List<Integer> list = stream.toList();
System.out.println("list = " + list);

输出:

list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

🔍 关键参数解析

参数 作用说明
estimateSize 你预估的数据量,影响流的优化(不是必须精确)
characteristics 表示流是否是有序、不可变、大小已知等(以后会讲)
parallel 是否并行处理(true:多线程,false:单线程)

💡 用途场景

这种方式常用于:

  • 第三方库只暴露 Iterator
  • 想将老旧代码中的迭代器逻辑现代化为 Stream 流式处理
  • 在不使用额外集合(如 List)前提下,对数据做流式转换

🧠 小结

创建来源 推荐方式
List/Set collection.stream()
Map map.entrySet().stream()
Iterator StreamSupport.stream(...) 进阶方式

🚀 结语

尽管我们最常用的是 collection.stream(),但在复杂项目中,你可能会处理 Map、Iterator、甚至是数据库游标。这时灵活使用各种流创建方式,将极大提升你的代码表现力与可维护性。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容