如何结合 Mono 和 Flux 来创建一个对象?
How to combine a Mono and a Flux to create one object?
我想创建一个对象,对象由一个Mono和一个Flux组成。
假设有 2 个服务 getPersonalInfo
和 getFriendsInfo
。 Person
需要这两种服务来创建对象。压缩只采用 friends
对象的第一个元素,因为只有一个 personalInfo
因为它是 Mono,但 friendsInfo
可能有多个 friend
对象。我想在 Person
.
中将 friendsInfo
设置为 friend
class Person{
String name;
String age;
List<Friend> friend;
}
Mono<PersonalInfo> personalInfo = personService.getPerson();// has name and age
Flux<Friend> friendsInfo = friendsService.getFriends();
// here I want to create Person object with personalInfo and friendsInfo
Flux<Person> person = Flux.zip(personalInfo, friendsInfo, (person, friend) -> new Person(person, friend));
根据你的问题,我假设你想创建一个 单人 对象,其中包含从你的 Mono<PersonalInfo>
填充的姓名和年龄,以及从你的 Flux<Person>
.
您的尝试非常接近:
Flux<Person> person = Flux.zip(Person, Friend, (person, friend) -> new Person(person, friend));
特别是,带有需要两个发布者和一个组合器的重载的 zip
运算符在这里使用是正确的。但是,有几点需要更改:
- 您想要一个 单个
Person
对象,因此它应该是一个 Mono<Person>
(以及关联的 Mono.zip()
.
- 根据评论,您需要将 Flux 转换为列表,您可以使用
collectList()
oeprator 来完成此操作。
所以把它们放在一起,你最终会得到类似的东西:
Mono<Person> person = Flux.zip(personalInfo, friendsInfo.collectList(), (personalInfo, friendsList) -> new Person(personalInfo, friendsList));
...这应该可以满足您的需求。
我想创建一个对象,对象由一个Mono和一个Flux组成。
假设有 2 个服务 getPersonalInfo
和 getFriendsInfo
。 Person
需要这两种服务来创建对象。压缩只采用 friends
对象的第一个元素,因为只有一个 personalInfo
因为它是 Mono,但 friendsInfo
可能有多个 friend
对象。我想在 Person
.
friendsInfo
设置为 friend
class Person{
String name;
String age;
List<Friend> friend;
}
Mono<PersonalInfo> personalInfo = personService.getPerson();// has name and age
Flux<Friend> friendsInfo = friendsService.getFriends();
// here I want to create Person object with personalInfo and friendsInfo
Flux<Person> person = Flux.zip(personalInfo, friendsInfo, (person, friend) -> new Person(person, friend));
根据你的问题,我假设你想创建一个 单人 对象,其中包含从你的 Mono<PersonalInfo>
填充的姓名和年龄,以及从你的 Flux<Person>
.
您的尝试非常接近:
Flux<Person> person = Flux.zip(Person, Friend, (person, friend) -> new Person(person, friend));
特别是,带有需要两个发布者和一个组合器的重载的 zip
运算符在这里使用是正确的。但是,有几点需要更改:
- 您想要一个 单个
Person
对象,因此它应该是一个Mono<Person>
(以及关联的Mono.zip()
. - 根据评论,您需要将 Flux 转换为列表,您可以使用
collectList()
oeprator 来完成此操作。
所以把它们放在一起,你最终会得到类似的东西:
Mono<Person> person = Flux.zip(personalInfo, friendsInfo.collectList(), (personalInfo, friendsList) -> new Person(personalInfo, friendsList));
...这应该可以满足您的需求。