第一次发布时,我正在Spring学习反应式流,并且遇到了以下问题。
我为Workspace类有一个mongo存储库,而对于Model类有另一个存储库。
当我查询所有工作空间时,我得到一个Flux,我希望将此通量中的每个元素转换为一个名为WorkspaceDTO的新类,并向modelsRepository查询以检索所有具有该属性的模型workspaceName等于我的工作空间名称,然后将此结果添加到WorkspaceDTO的一个List属性中。
我一直在尝试一些事情,但是还没有找到解决方法,有什么建议吗?
答案 0 :(得分:0)
最终设法使用以下代码:
Flux<Workspace> workspaces = repository.findAll();
return workspaces
.map(ws -> {
Mono<List<Model>> workspaceModels = modelRepository.findByWorkspaceName(ws.getName()).collectList();
return Mono.zip(Mono.just(ws),workspaceModels)
.map(t -> new WorkspaceDTO(t.getT1(),t.getT2()));
})
.flatMap(Flux::concat) //This operation transform a Flux<Mono<WorkspaceDTO>> into Flux<WorkspaceDTO>
.log();