Java - 响应式编程与事件监听器

Java -Reactive Programming vs Event Listener

响应式编程与在事件侦听器(鼠标、键)中调用函数有何不同,因为两者都是异步事件流,那么响应式编程与传统事件侦听器调用相比有何优势?

事件侦听器实际上只有 RxJava 提供的功能的一个子集,而这正是它试图解决的问题:

但是让我们后退几步,更容易理解什么是 Observable is if you compare it to an Iterator(推与拉)。

Iterator.next() 等同于 Observable.onNext() - 当下一个 item/event 发生时 - 消耗它。

Iterator.hasNext() 等同于 Observable.onComplete() - 它允许发布者通知订阅者没有更多的事件可以使用(EventListener 模型中缺少的一件事)。

对于第三个,Observable.onError() 没有等效项,因为使用 Iterator,当您尝试获取 next()remove() 时,您知道您可能会获取 NoSuchElementException , UnsupportedOperationExceptionIllegalStateException 并且您可以捕获并处理它们中的任何一个,因为您是同步进行的。

对于发布者而言,如果发生错误,则无法通知 Listener/subscriber 其他然后崩溃。 onError() 是最后遗漏的部分,以便 Observable 可以优雅地处理任何错误。

总而言之,Reactive Java 开始修复事件模型中长期缺失的部分。通过提供那些缺失的部分,并通过提供函数式编程风格(支持 map、flatmap、filter 等),它有助于以自然、可读的方式组合异步调用,减少当编程风格是命令式时(例如嵌套用于-loops) 并创建 .