![](/img/trans.png)
[英]Monix : InputStreamObservable does not support multiple subscribers
[英]How to globally order multiple ordered observables in Monix
不使用 Monix,但我不確定這是否相關
import scala.collection.BufferedIterator
def merge[A:Ordering](xs: Seq[Iterator[A]]) =
new Iterator[A] {
val its = xs.map(_.buffered)
def hasNext = its.exists(_.hasNext)
def next = its.filter{ _.hasNext}
.minBy(_.head)
.next
}
val ys = merge(Seq(List(1,3,5).toIterator, List(2,4,6).toIterator, List(10,11).toIterator))
ys.toList //> res0: List[Int] = List(1, 2, 3, 4, 5, 6, 10, 11)
由於 observable 是一個項目流,它可以概括為兩種類型:
請注意,為了正確排序,您需要所有項目。 因此,沒有簡單的方法可以做到這一點。
對於有限流,您必須累積所有項目,然后進行排序。 您可以使用Observable.fromIterable
將其轉回可Observable.fromIterable
。
val items = List((1,3,4), (2,4,5))
val sortedList = Observable
.fromIterable(items)
.flatMap(item => Observable.fromIterable(List(item._1, item._2, item._3)))
.toListL // Flatten to an Observable[Int]
.map(_.sorted)
對於無限流,您唯一可以做的就是將項目緩沖到特定時間或大小。 我看不到任何方法,因為您不知道流何時結束。
例如,
val itemsStream: Observable[(Int, Int, Int)] = ???
itemsStream
.bufferIntrospective(10)
.flatMap((itemList: List[(Int, Int, Int)]) => // You'll have to sort this
???
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.