java - 如何在不阻塞的情况下从 Flux 获取 List?

标签 java spring-boot reactive-programming spring-webflux

我有一个返回通量的存储库,并希望将结果设置为另一个需要列表的对象。有没有其他方法可以在不阻塞的情况下以列表形式获取结果?

该 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) 
}  
  1. 如果您设置操作为阻塞,请使用publishOn/subscribeOn以避免阻塞所有流。
  2. 它开始执行您的流

关于java - 如何在不阻塞的情况下从 Flux 获取 List?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55766421/

相关文章:

java - 无法从 fragment 中的编辑文本获取值

java - Junit如何在测试方法中模拟方法返回?

java - 先前完成后添加新订阅

ios - Observable 不响应 .drive 方法

java - 忽略 jsonassert 中的特定属性/字段

java - 在 hibernate 查询返回的列表对象中迭代结果

java - spring中如何每30分钟更新一次缓存?

java - Dao实现中如何进行以下操作?

android - 将现有的 WebSocket 实现转换为 Android Java 中的 Reactive WebSocket

java - Scala 正则表达式堆栈溢出