对列表中的所有项目执行一个任务,然后在 RxJava 中执行另一个任务
Perform a task for all items in a list and then perform another task in RxJava
不幸的是,我的 REST 删除操作仅适用于一项。所以我想做的是,
Observable.just(items).flatMapIterable { items -> items }.flatMap {
//call REST DELETE for every item
}.flatMap {
// call REST GET
}
问题是正在为每个项目调用 GET 调用。我如何等待完成所有删除完成然后执行 GET 调用?
提前致谢。
在你的情况下,你可以这样申请toList()
fun doTask(items: List<String>):Observable<Boolean>{
return Observable.fromIterable(items)
.flatMap { processItem(it) }
.toList()
.toObservable()
.flatMap { finalTask() }
}
问题可以用zip解决。如果有人想要这个
fun doTask(items: ArrayList<String>): Observable<Boolean> {
val list = arrayListOf<Observable<String>>()
items.forEach {
list.add(processItem(it))
}
return Observable.zip(list) {
}.flatMap {
finalTask()
}
}
fun processItem(s: String): Observable<String> {
print(s)
return Observable.just(s.toUpperCase())
}
fun finalTask(): Observable<Boolean> {
print("final")
return Observable.fromCallable { true }
}
Observable.just("one", "two", "three", "four", "five").subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.d("ffff", s);//print: one, two, three, four, five
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
}
}, new Action() {
@Override
public void run() throws Exception {
Log.d("ffff", "complete");//print: complete
}
});
不幸的是,我的 REST 删除操作仅适用于一项。所以我想做的是,
Observable.just(items).flatMapIterable { items -> items }.flatMap {
//call REST DELETE for every item
}.flatMap {
// call REST GET
}
问题是正在为每个项目调用 GET 调用。我如何等待完成所有删除完成然后执行 GET 调用?
提前致谢。
在你的情况下,你可以这样申请toList()
fun doTask(items: List<String>):Observable<Boolean>{
return Observable.fromIterable(items)
.flatMap { processItem(it) }
.toList()
.toObservable()
.flatMap { finalTask() }
}
问题可以用zip解决。如果有人想要这个
fun doTask(items: ArrayList<String>): Observable<Boolean> {
val list = arrayListOf<Observable<String>>()
items.forEach {
list.add(processItem(it))
}
return Observable.zip(list) {
}.flatMap {
finalTask()
}
}
fun processItem(s: String): Observable<String> {
print(s)
return Observable.just(s.toUpperCase())
}
fun finalTask(): Observable<Boolean> {
print("final")
return Observable.fromCallable { true }
}
Observable.just("one", "two", "three", "four", "five").subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.d("ffff", s);//print: one, two, three, four, five
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
}
}, new Action() {
@Override
public void run() throws Exception {
Log.d("ffff", "complete");//print: complete
}
});