Android 从列表中发送每个项目
我有一个像这样的DAO方法,它工作得很好: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
@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(..., ...)