在Scala中将Rx观测值转换为Twitter期货
我想以最积极的方式实现以下功能。我需要这些来实现上述类型之间的自动转换的双射在Scala中将Rx观测值转换为Twitter期货,scala,rx-java,rx-scala,Scala,Rx Java,Rx Scala,我想以最积极的方式实现以下功能。我需要这些来实现上述类型之间的自动转换的双射 def convertScalaRXObservableToTwitterFuture[A](a: Observable[A]): TwitterFuture[A] = ??? def convertScalaRXObservableToTwitterFutureList[A](a: Observable[A]): TwitterFuture[List[A]] = ??? 我偶然看到一篇关于一个相关主题的文章,但我无
def convertScalaRXObservableToTwitterFuture[A](a: Observable[A]): TwitterFuture[A] = ???
def convertScalaRXObservableToTwitterFutureList[A](a: Observable[A]): TwitterFuture[List[A]] = ???
我偶然看到一篇关于一个相关主题的文章,但我无法让它发挥作用 不幸的是,那篇文章中的说法是不正确的,
可观察的
和类似于未来的
之间不可能有真正的双射。问题是,可观察的
是更强大的抽象,它可以表示未来无法表示的事物。例如,Observable
实际上可能表示一个无限序列。例如,请参见。显然,没有办法用未来来表示这样的东西。该文章中使用的调用明确提到:
返回发出单个项的Single
,该列表由finite源可观测资源发出的所有项组成
后来它说:
无限且永远不完整的源永远不会通过此运算符发出任何信息,无限源可能导致致命的OutOfMemoryError
即使您将自己限制为有限的可观察的
s,仍然未来
无法完全表达可观察的
的语义。考虑在一个时间段内逐个生成有限的范围。使用Observable
时,第一个事件发生在initialDelay
之后,然后在每个时段
获得事件。使用Future
您只能获得一个事件,并且必须仅在序列完全生成时才能获得,以便可观察到的
完成。这意味着通过将可观察的[A]
转化为未来的[List[A]]
,你立即打破了可观察的
-反应性的主要优点:你不能一个接一个地处理事件,你必须在一堆中处理它们
总结本条第一款中的权利要求:
在两者之间进行转换,而不会失去它们的异步和事件驱动特性
是错误的,因为转换可观察的[A]
->未来的[List[A]
完全失去了可观察的
的“事件驱动性质”,并且没有办法解决这个问题
另外,事实上,Future
不如Observable
强大,这一点并不令人惊讶。如果不是,为什么有人会首先创建可观察的呢?不幸的是,那篇文章中的说法是不正确的,而且在可观察的和类似未来的之间不可能有真正的双射。问题是,可观察的
是更强大的抽象,它可以表示未来无法表示的事物。例如,Observable
实际上可能表示一个无限序列。例如,请参见。显然,没有办法用未来来表示这样的东西。该文章中使用的调用明确提到:
返回发出单个项的Single
,该列表由finite源可观测资源发出的所有项组成
后来它说:
无限且永远不完整的源永远不会通过此运算符发出任何信息,无限源可能导致致命的OutOfMemoryError
即使您将自己限制为有限的可观察的
s,仍然未来
无法完全表达可观察的
的语义。考虑在一个时间段内逐个生成有限的范围。使用Observable
时,第一个事件发生在initialDelay
之后,然后在每个时段
获得事件。使用Future
您只能获得一个事件,并且必须仅在序列完全生成时才能获得,以便可观察到的
完成。这意味着通过将可观察的[A]
转化为未来的[List[A]]
,你立即打破了可观察的
-反应性的主要优点:你不能一个接一个地处理事件,你必须在一堆中处理它们
总结本条第一款中的权利要求:
在两者之间进行转换,而不会失去它们的异步和事件驱动特性
是错误的,因为转换可观察的[A]
->未来的[List[A]
完全失去了可观察的
的“事件驱动性质”,并且没有办法解决这个问题
另外,事实上,Future
不如Observable
强大,这一点并不令人惊讶。如果不是,为什么有人会首先创建Observable
?那是哪篇文章?哎呀。很抱歉现在添加了链接。那是哪篇文章?哎呀。很抱歉现在添加了链接。