我有一个返回通量的存储库,并希望将结果设置为另一个需要列表的对象。有没有其他方法可以在不阻塞的情况下以列表形式获取结果?
该 block 正在工作,但需要很长时间。
public class FluxToListTest {
@Autowired PostRepository postRepository;
public void setUserPosts(User user) {
user.setPostList(postRepository.findAllByOrderId(user.getId()).collectList().block());
}
}
interface PostRepository {
Flux<Post> findAllByOrderId(final UUID userId);
}
@Data
class User {
UUID id;
List<Post> postList;
}
class Post {
UUID id;
String content;
}
最佳答案
简而言之 - 不。
您不需要从 Flux
中提取 List
。
如果您已经开始使用 Reactor Streams - 请继续使用。
试试这个代码:
public void setUserPosts(User user) {
postRepository.findAllByOrderId(user.getId())
.collectList()
.doOnNext(user::setPostList)// (1)
.subscribe(); // (2)
}
- 如果您设置操作为阻塞,请使用publishOn/subscribeOn以避免阻塞所有流。
- 它开始执行您的流
关于java - 如何在不阻塞的情况下从 Flux 获取 List?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55766421/