我开始接受反应式编程。在参加了一些关于reactor和spring 5.0的讨论后,我想自己尝试这个编程模型。
我有一个应用程序,它使用WebClient从不同的API构建两个Flux对象。我想将这2个对象组合成一个并将其返回给用户。
代码示例如下所示:
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的第一个项目。
答案 0 :(得分:2)
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