微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Spring Webflux 将 Flux 转换为树

如何解决使用 Spring Webflux 将 Flux 转换为树

我们最近开始将我们的 Spring WebMVC 代码重构为 WebFlux,用 WebClient 替换 RestTemplate。

从外部 Web 服务器,我们收到一个对象(产品)的平面列表,每个对象都包含对父对象的引用:

            webClient
                .get()
                .uri(productURI)
                .retrieve()
                .bodyToFlux(Product.class)

我们现在将此产品列表转换为树状结构,在每个根产品下的层次结构中由少量根产品(作为列表)和许多子产品组成。

在之前的代码中,转换很容易完成,因为我们最终得到了完整的平面列表,我们从中创建了一个新的结果列表。

对于反应流,我很困惑如何将原始的 Flux of Products 转换为完全不同的结构。

解决方法

有多种解决方案可用。

如果您的数据适合内存,响应没有分页并且您想保留现有实现,您可以将 Flux<Product> 收集到一个列表中并使用现有算法。

productFlux
.collectList()
.map(products -> buildTree(products))

如果您想更有效地计算树结构,例如由于以分页方式加载数据,reduce 运算符将是可行的方法。

productFlux
.reduce(new ProductTree(),(tree,nextProduct) -> tree.add(nextProduct))

这里的树需要一个方法 add(nextProduct) 来分多个步骤构建最终的树。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。