【问题标题】:Transform sequence of T into List<T> inside infinite stream将 T 的序列转换为无限流内的 List<T>
【发布时间】:2017-01-24 20:17:56
【问题描述】:

我正在使用 RxBinding 来处理我的应用程序中的搜索。如何将结果作为项目列表获取? toList().toBlocking().single() 不是无限流中的选项,因为永远不会调用 onComplete()。有任何想法吗?谢谢。

RxSearchView.queryTextChanges(searchView)
                    .filter(queryString -> queryString.length() > 3 || queryString.length() == 0)
                    .debounce(500, TimeUnit.MILLISECONDS)
                    .map(CharSequence::toString)
                    .flatMap(s -> Observable.from(fishPlaces)
                                            .filter(fishPlace -> fishPlace.getName().toLowerCase().contains(s.toLowerCase())))
                    .subscribe(fishPlace -> { **// HOW TO GET A LIST<FISHPLACE> HERE???** }, throwable -> {});

【问题讨论】:

    标签: android rx-java rx-android rx-binding


    【解决方案1】:

    我猜你想要的是匹配特定搜索字符串的“fishPlaces”列表。

    我也猜想“fishPlaces”的数量是有限的,否则列出它是没有意义的。

    稍作改动(没有实际运行代码),我想以下方法会起作用:

    RxSearchView.queryTextChanges(searchView)
                        .filter(queryString -> queryString.length() > 3 || queryString.length() == 0)
                        .debounce(500, TimeUnit.MILLISECONDS)
                        .map(CharSequence::toString)
                        .map(s -> Observable.from(fishPlaces)
                                            .filter(fishPlace -> fishPlace.getName().toLowerCase().contains(s.toLowerCase()))
                                            .toList().toBlocking().single())
                        .subscribe(fishPlaces -> { /* Go fishing! */ }, throwable -> {});
    

    【讨论】:

      【解决方案2】:

      你的平面图中的 observable 可以被阻塞。因此,您可以只使用 map() 而不是 flatmap() 并在可观察的fishplaces 上执行 toList() 。

      .map(s -> Observable.from(fishPlaces).filter(fP-> foo(s, fP)).toList()))

      【讨论】:

        猜你喜欢
        • 2021-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-02
        • 2014-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多