如何解决使用 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 举报,一经查实,本站将立刻删除。