如何将两个 Flux<> 对象组合成一个

How to compose two Flux<> Objects into one

我对响应式编程有点陌生。在参加了一些关于 reactor 和 spring 5.0 的讨论后,我想自己尝试一下这个编程模型。

我有一个应用程序,它使用 WebClient 从不同的 API 构建两个 Flux 对象。我想将这 2 个对象组合成一个对象 return 给用户。

代码示例如下所示:

public class User {
  private String username;
  //getters and setters
}

public class Address {
  private String street;
  //getters and setters;
}

public class CompleteUser {
  private String username;
  private String address;
  //getters and setters
}

现在在我的处理程序方法中:

final Flux<User> = WebClient.create()...;
final Flux<Address> = WebClient.create()...;
final Flux<CompleteUser> = //somehow compose this two types into one

我应该使用 reactor API 中的什么方法来实现此目的?我找到了一些组合对象的方法,例如 combineLatest 但是在这种情况下,我想将第一个 Flux 的第一项与第二个 Flux 的第一项等组合起来

Flux.zip 静态方法正是您要找的。对于 2 个来源的组合,您可以提供 BiFunction 来生成结果。

Flux<CompleteUser> complete = Flux.zip(fluxUser, fluxAddress, (u, a) -> new CompleteUser(u, a));
//if the ctor perfectly matches, you can also use CompleteUser::new