在我的带有Spring HATEOAS应用程序的反应式Java 9 Spring Boot 2中,我有一个返回Mono<Resources<Resource<T>>>
的REST API。在应用程序层中,我希望数据为Mono<List<T>>
,但我如何简洁地将Mono<Resources<Resource<T>>>
映射到Mono<List<T>>
?
我期待的是:
public Mono<List<Order>> orders() {
return rest.orders()
.flatmap(List::stream)
.map(r -> r.getContent())
.collect(Collectors.toList());
}
但由于List
未定义List.stream(Resources<Resource<Order>>
,因此无法编译。 rest.orders()
会返回Mono<Resources<Resource<Order>>>
。有什么想法吗?
答案 0 :(得分:0)
(记忆晃动)解决方案:
public Mono<List<Order>> orders() {
return rest.orders()
.map(r -> toList(r));
}
private List<Order> toList(Resources<Resource<Order>> resources) {
List<Order> orders = new ArrayList<>();
resources.forEach(r -> orders.add(r.getContent());
return orders;
}