如何在不调用 Future.get 的情况下将 Future 转换为 Stream?

How to convert Future to Stream without calling Future.get?

假设我有一个 Future 对象列表。List<Future<List<Data>>> futures。我想把它转换成一个 Stream<Data>.
显然我可以这样做:

List<Data> list=new ArrayList();
for(Future future:futures){
    list.addAll(future.get());
}
return list.steam();

但此方法必须等待所有期货到 return 才能 return Stream。
我想让它像管道一样工作,上层从流中提取数据并根据需要进行处理,而不必等待所有期货完成。

你想要这样的东西吗?

List<Future<List<Data>>> futures;
return futures.stream().flatMap(future->future.get().stream());

map()flatMap()只有在实际使用时才运行。

这样,您就不会避免 get() 调用,但它只会在您使用它的那一刻被调用。