从列表中发出每个项目
emitting each item from list
我有一个像这样的 DAO 方法,它运行良好:
@Query("SELECT name FROM Weather")
Single<List<String>> getCity();
还有我的方法 activity:
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()
下一个过滤器等等。
如何在 apply 方法中发出 List<String>
字符串中的每个项目,以便我可以删除重复的 (distinct()
) 项目、过滤然后使用方法 toList()
你必须 flatMap
一个 Observable,像这样:
.flatMapObservable(new Function<ArrayList<String>, ObservableSource<? extends String>>() {
@Override
public ObservableSource<? extends String> apply(ArrayList<String> source) throws Exception {
return Observable.fromIterable(source);
}
})
如果您可以使用 lambda 表达式和方法引用,您可以将所有仪式替换为以下之一:
// Lambda version
.flatMapObservable(source -> Observable.fromIterable(source))
// Method reference version
.flatMapObservable(Observable::fromIterable)
您也可以尝试这样的操作:
mDatabase.getWeatherDao().getCity()
.toObservable()
.flatMapIterable(r -> r)
.distinct()
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(..., ...)
这将 "as is" 用于字符串,对于更复杂的对象,您需要确保散列和等于(列表中实体的)工作正确。
我有一个像这样的 DAO 方法,它运行良好:
@Query("SELECT name FROM Weather")
Single<List<String>> getCity();
还有我的方法 activity:
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()
下一个过滤器等等。
如何在 apply 方法中发出 List<String>
字符串中的每个项目,以便我可以删除重复的 (distinct()
) 项目、过滤然后使用方法 toList()
你必须 flatMap
一个 Observable,像这样:
.flatMapObservable(new Function<ArrayList<String>, ObservableSource<? extends String>>() {
@Override
public ObservableSource<? extends String> apply(ArrayList<String> source) throws Exception {
return Observable.fromIterable(source);
}
})
如果您可以使用 lambda 表达式和方法引用,您可以将所有仪式替换为以下之一:
// Lambda version
.flatMapObservable(source -> Observable.fromIterable(source))
// Method reference version
.flatMapObservable(Observable::fromIterable)
您也可以尝试这样的操作:
mDatabase.getWeatherDao().getCity()
.toObservable()
.flatMapIterable(r -> r)
.distinct()
.toList()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(..., ...)
这将 "as is" 用于字符串,对于更复杂的对象,您需要确保散列和等于(列表中实体的)工作正确。