是否建议将 Arraylist 转换为 Reactor 的 Flux 用于处理数据?
Posted
技术标签:
【中文标题】是否建议将 Arraylist 转换为 Reactor 的 Flux 用于处理数据?【英文标题】:Is it recommended to convert Arraylist into Reactor's flux for Processing data? 【发布时间】:2019-12-03 09:38:15 【问题描述】:我的一位同事对我说,我应该创建一个 Flux 而不是按原样使用 List,而不是处理流,然后将我的数据处理到它。
但这对我来说没有意义,因为我认为反应流通常对阻塞 io 而不是数据处理有用。
有人可以验证我同事建议的新方法是否正确。 如果它是正确的,它比我以前的方法有什么优势(性能方面)
//Model
rootObject
List<rootNodes> rootNodes
//My current code
MonoOfRootObject.map( rootobject.getrootnodes.stream()
.(..do some filtering and replacement..) )
//Proposed code according to my colleague
MonoOfRootObject.map( Flux.fromIterable(rootobject.getrootnodes)
.(..do some filtering and replacement..) )
请帮助我对 Reactor(或一般的函数式编程)有点陌生
谢谢
【问题讨论】:
你自己验证过这个方法吗?也许它会澄清你的疑虑 如果您当前的代码确实只是映射到一个列表,那么您的两种方法都有些奇怪,根本没有理由将它包装在一个单声道中 - 只需“rootObject.stream()”列表并使用标准 Java 流来完成这项工作。 @Micheal Berry 我只能将根对象作为单声道接收,我自己并没有真正将其转换为单声道,我从反应式存储库接收根对象单声道。我将更新代码以使其适合。感谢您指出这一点。 【参考方案1】:是的,你是对的。当您需要处理异步数据和/或并发时,Reactor 和 Reactive Streams 通常很有用。
要对内存中的列表进行常规过滤和转换,Java Stream 完全没问题,而使用 Reactive Stream 是多余的(而且可能还会增加性能开销)。
【讨论】:
以上是关于是否建议将 Arraylist 转换为 Reactor 的 Flux 用于处理数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在android中将arraylist或vector插入SQLite数据库?
将字符串数组转换为 Arraylist 的 ArrayList [重复]