如何将两个 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
我对响应式编程有点陌生。在参加了一些关于 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