我创建了一个从 edittext 发出文本的 Observable。然后在使用 switchmap 运算符时,我创建了一个在文件中查找匹配项的 Single。
我在这里订阅:
compositeDisposable.add(getEditTextObservable(editText)
.debounce(500, TimeUnit.MILLISECONDS)
.map(String::toLowerCase)
.filter(s -> !TextUtils.isEmpty(s))
.switchMapSingle(s -> textCutter.getSearchResult(s))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
);
这是搜索:
public Single<List<TextCut>> getSearchResult(String searchRequest) {
return Single.fromCallable(() -> textGen.getCutList(searchRequest));
}
结果,我得到每个请求都是依次执行的。例如,如果我输入查询“dog”,然后输入“cat”,结果会得到“dog”和“cat”。虽然我预计只会得到“猫”
例如:
输入:狗
“狗”正在进行中...
输入:猫
输出:['狗'的结果]
“猫”正在进行中...
输出:['猫'的结果]
我期望得到:
输入:
正在进行中的狗“狗”......
输入:猫
“狗”已取消......正在进行中的
“猫”......
输出:['cat'的结果]