Как получить список от Flux без блокировки? - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть репозиторий, который возвращает поток и хотел установить результат для другого объекта, который ожидает список. Есть ли другой способ получить результаты в виде списка без блокировки?

Блок работает, но это занимает много времени.

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;
}

1 Ответ

0 голосов
/ 22 апреля 2019

Короче - НЕТ .Вам не нужно извлекать List из Flux.Если вы начали использовать Reactor Streams - оставайтесь с ним.

Попробуйте этот код:

public void setUserPosts(User user) {
    postRepository.findAllByOrderId(user.getId())
        .collectList()
        .doOnNext(user::setPostList)// (1)
        .subscribe();               // (2) 
}  
  1. , если вы устанавливаете операцию, блокирующую, пожалуйста, используйте publishOn / subscribeOn , чтобы избежать блокировки всего потока.
  2. запускает ваш поток, выполняя
...