如何在不调用 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()
调用,但它只会在您使用它的那一刻被调用。
假设我有一个 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()
调用,但它只会在您使用它的那一刻被调用。