在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

那是哪篇文章?哎呀。很抱歉现在添加了链接。那是哪篇文章?哎呀。很抱歉现在添加了链接。