Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从列表中发送每个项目_Android_Rx Java - Fatal编程技术网

Android 从列表中发送每个项目

Android 从列表中发送每个项目,android,rx-java,Android,Rx Java,我有一个像这样的DAO方法,它工作得很好: @Query("SELECT name FROM Weather") Single<List<String>> getCity(); @Query(“从天气中选择名称”) 单一城市(); 以及我活动中的一种方法: mDatabase.getWeatherDao().getCity() .subscribeOn(Schedulers.io()) .observeOn(Androi

我有一个像这样的DAO方法,它工作得很好:

@Query("SELECT name FROM Weather")
Single<List<String>> getCity();
@Query(“从天气中选择名称”)
单一城市();
以及我活动中的一种方法:

mDatabase.getWeatherDao().getCity()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .flatMap(new Function<List<String>, SingleSource<String>>() {
                @Override
                public SingleSource<String> apply(List<String> strings) throws Exception {
                    return ....; 
                }
            })
            .distinct()
mDatabase.getWeatherDao().getCity()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap(新函数(){
@凌驾
公共单源应用(列表字符串)引发异常{
回来
}
})
.distinct()
下一个过滤器等等


如何在apply方法中从
列表
字符串中发出每个项,以便删除重复的(
distinct()
)项,过滤并使用方法toList()

您必须
flatMap
一个可观察项,如下所示:

.flatMapObservable(new Function<ArrayList<String>, ObservableSource<? extends String>>() {
    @Override
    public ObservableSource<? extends String> apply(ArrayList<String> source) throws Exception {
        return Observable.fromIterable(source);
    }
})

您也可以尝试以下方法:

mDatabase.getWeatherDao().getCity()
                .toObservable()
                .flatMapIterable(r -> r)
                .distinct()
                .toList()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(..., ...)

这将“按原样”处理字符串,对于更复杂的对象,您需要确保(列表中的实体)的散列和相等运算是正确的。

如果返回类型不是
列表所必需的,那么您可以将
映射到
,将其保持为
单个

mDatabase.getWeatherDao().getCity()
                .toObservable()
                .flatMapIterable(r -> r)
                .distinct()
                .toList()
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(..., ...)