为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以混合使用反应性代码,即 Mono 和 Flux 对象,它们是反应性流以及

是否可以混合使用反应性代码,即 Mono 和 Flux 对象,它们是反应性流以及

开满天机 2023-04-19 15:43:48
我有两个对象,每个对象都包含列表,我的整个 spring boot 项目都在使用项目反应器构造。我应该在 flux 或 mono map 操作中使用 java 流来遍历和操作数据吗?Flux.fromIterable(page.getPageFieldData()).subscribeOn(Schedulers.elastic()).map(pageField - > {        clientDataMono.subscribeOn(Schedulers.elastic()).map(clientData - > {            Flux.fromIterable(clientData.getPageFieldData())            .filter(clientPageField - > clientPageField.getId() == pageField.getId())            .subscribeOn(Schedulers.elastic()).map(field - > {                dataUpdated = true;                pageField.setData(field.getData());                return field;            }).subscribe();            return clientData;        }).subscribe();        if (dataUpdated) {            pageField.setModifiedOn(Instant.now(Clock.systemUTC()));        }        return pageField;    }).subscribe();或者我应该在 flux 的映射操作中使用 java 流。
查看完整描述

1 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

有时我觉得在 Java 8 出现之后,我们看到了同样的“想要为所有事情使用流”的心态,但是有了 Reactor / RXJava。

我应该在 flux 或 mono map 操作中使用 java 流来遍历和操作数据吗?

简短的回答是,如果您可以明智地使用 Java 流,并且 Reactor 在这种情况下没有提供任何优势,那么就没有理由使用 Reactor。当用例需要时,Reactor / 反应式编程非常棒,但请记住,它是一个外部库(未捆绑在核心 JRE 中),它比标准 Java 流更复杂,更难被普遍理解。

Reactor 当然要强大得多。如果您需要控制产生值的速度、背压、详细的发布者/订阅者行为、多播、缓存、重试等,或者您可能在未来可行,那么它每次都会赢得胜利。

但是,如果您实际上只是过滤和映射现有的 Java 集合,就像您在该示例中那样,反应堆无法提供任何改进,我认为没有充分的理由不使用标准 Java 流。


查看完整回答
反对 回复 2023-04-19
  • 1 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信