如何将RxTextView switchMap与Flowable数据一起使用?

时间:2017-04-10 22:52:00

标签: android rx-java observable rx-android rx-java2

宣布搜索输入值,我希望switchMap()使用返回Flowable<List<T>>的方法我使用@Maxim Ostrovidov建议编辑我的代码,现在使用debounce我添加了3行,如想要通过列表转换为其他时间和接收列表,但不起作用。在其他情况下,我使用了这3行,但不适用于debounceswitchMap

.flatMapIterable(items -> items)
        .map(Product::fromApi)
        .toList()




  subscription = RxTextView.textChangeEvents(searchInput)
            .toFlowable(BackpressureStrategy.BUFFER)
            .debounce(400, TimeUnit.MILLISECONDS)
            .observeOn(Schedulers.computation())
            .switchMap(event -> getItems(searchInput.getText().toString()))
            .flatMapIterable(items -> items)
            .map(Product::fromApi)
            .toList()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
         .subscribe(/../);

1 个答案:

答案 0 :(得分:2)

由于没有Observable.switchMapFlowable运算符yet,您必须使用toObservabletoFlowable手动转换流(取决于您计划获得的流类型)最终):

// Observable stream
RxTextView.textChangeEvents(searchInput)
    .debounce(300, TimeUnit.MICROSECONDS)
    .switchMap(event -> yourFlowable(event).toObservable())
    ...

// Flowable stream
RxTextView.textChangeEvents(searchInput)
    .toFlowable(BackpressureStrategy.BUFFER) //or any other strategy
    .debounce(300, TimeUnit.MICROSECONDS)
    .switchMap(event -> yourFlowable(event))
    ...