将单声道列表转换为助焊剂

时间:2019-07-16 21:07:29

标签: java reactive-programming project-reactor reactor

我有以下模型:

class Person {
    List<Address> addresses;
}

我使用ReactiveMongoRepository来检索Mono。

public interface PersonRepository extends ReactiveMongoRepository<Person, String>{
}

但是我找不到从地址列表中检索地址通量的方法。 这是我想要实现的目标的签名:

Flux<Addresses> getAddressesByPersonId(String personId)

我尝试了以下方法:

public Flux<Addresses> getAddressesByPersonId(String personId){
    Mono<Person> person = personRepository.findById(personId);
    return person.map(e -> e.getAdresses()).flux()
}

但是我得到了错误:

Type mismatch: cannot convert from Flux<List<Person>> to Flux<Person>

问题:如何获取给定Person的存储为列表的地址流量?

1 个答案:

答案 0 :(得分:1)

使用flatMapMany。它是flatMap,具有从Mono过渡到Flux世界的额外纽带。

public Flux<Addresses> getAddressesByPersonId(String personId){
    Mono<Person> person = personRepository.findById(personId);
    return person.flatMapMany(e -> e.getAddresses()).flux()
}

https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html

  

rx运算符将为输入Mono类型提供别名,以保留所得Mono的“至多”属性。例如,flatMap返回一个Mono,而存在一个flatMapMany别名,该别名可能具有多个发射。