gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 23:11:59 26 4
gpt4 key购买 nike

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

我认为用大理石更容易解释我的问题。我在这里使用 combineLatest: enter image description here1 是加载的数据。 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

关于android - RxJava - 如何在另一个流等待第一个项目时缓冲流中的所有项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55925960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com