You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从传入的Stream创建Supplier?解决Stream仅能消费一次问题

实现Stream到Supplier<Stream>的转换

你的实现思路完全正确:

  • 由于Stream只能被消费一次,将原Stream的元素缓存到List中是可靠的解决方案。每次调用Supplier的get()方法时,都会基于缓存的List生成全新的Stream实例,保证可以重复获取可用的Stream。

补充几点注意事项:

  • 若使用Java 16之前的版本,src.toList()需要替换为src.collect(Collectors.toList()),因为toList()是Java 16新增的Stream方法。
  • 无限流场景不适用:如果传入的src是无限Stream(比如Stream.generate(Math::random)),调用toList()会导致线程持续阻塞,因为无法收集完无限多的元素。

兼容Java 8+的代码示例:

import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamSupplierUtil {
    public static <T> Supplier<Stream<T>> cache(Stream<T> src) {
        List<T> cachedList = src.collect(Collectors.toList());
        return cachedList::stream;
    }
}

内容的提问来源于stack exchange,提问作者Zé Antônio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 20:19:53