RxJava - 如何在另一个流等待第一个项目时缓冲流中的所有项目?

RxJava - How to buffer all items from stream when another stream waits for first item?

有 2 个流。 Stream #1 从服务器加载数据以进行自动完成输入。流 #2 是来自该自动完成输入的用户输入。用户可以在数据加载时键入。数据加载一次。加载时,将按用户键入的所有值搜索数据。即使数据不可用,也需要搜索用户输入的所有内容。

我认为用大理石更容易解释我的问题。这里我使用 combineLatest 1 是加载的数据。 A、B、C、D 是用户输入。我想要实现的是在 1B 之前获得 1A。

我需要这样的流量:

User types: c - nothing happens 
User types: r - nothing happens 
Data is loaded: search is made for 'c' and for 'cr' 
User types: o - search is made for 'cro' 
User types: c - search is made for 'croc' and so on...

如何使用 combineLatest 或其他函数实现此目的?

可以使用 ReplaySubject 文本输入来实现类似的效果,该文本输入等待开始发射(并且当它重播所有项目开始时),直到加载初始数据。

例如:

    @JvmStatic
    fun main(string: Array<String>) {
        val input = ReplaySubject.create<String>()
        val api = PublishSubject.create<Int>()


        input.delaySubscription<Int>(api)
                .withLatestFrom(api, BiFunction<String, Int, Pair<String, Int>> { t1, t2 -> Pair(t1, t2) })
                .subscribe { println("Group : Letters : ${it.first}, Search with : ${it.second}") }

        input.onNext("A")
        input.onNext("AB")
        api.onNext(1)
        input.onNext("ABC")
        input.onNext("ABCD")
        input.onNext("ABCDE")
        api.onNext(2)
        input.onNext("ABCDEF")
        input.onNext("ABCDEFG")
        input.onNext("ABCDEFGH")
    }

输出:

Group : Letters : A, Search with : 1
Group : Letters : AB, Search with : 1
Group : Letters : ABC, Search with : 1
Group : Letters : ABCD, Search with : 1
Group : Letters : ABCDE, Search with : 1
Group : Letters : ABCDEF, Search with : 2
Group : Letters : ABCDEFG, Search with : 2
Group : Letters : ABCDEFGH, Search with : 2