将 T 的序列转换为无限流中的 List<T>
Transform sequence of T into List<T> inside infinite stream
我在我的应用程序中使用 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 -> {});
你的平面图中的 observable 可以被阻塞。因此,您可以只使用 map() 而不是 flatmap() 并在 fishplaces 的可观察对象上执行 toList() 。
.map(s -> Observable.from(fishPlaces).filter(fP-> foo(s, fP)).toList()))
我猜您要查找的是与特定搜索字符串匹配的 "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 -> {});
我在我的应用程序中使用 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 -> {});
你的平面图中的 observable 可以被阻塞。因此,您可以只使用 map() 而不是 flatmap() 并在 fishplaces 的可观察对象上执行 toList() 。
.map(s -> Observable.from(fishPlaces).filter(fP-> foo(s, fP)).toList()))
我猜您要查找的是与特定搜索字符串匹配的 "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 -> {});