地图Mono <resources <resource <t>&gt;&gt;到Mono <list <t>&gt;?

时间:2018-01-13 01:40:16

标签: java spring reactive-programming spring-hateoas

在我的带有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>>>。有什么想法吗?

1 个答案:

答案 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;
}