如何忽略 rxjava 中的一些转换
How to ignore some transform in rxjava
如以下示例代码,如果 flapMap 中的内容为真,我可以忽略一些转换并立即 运行 subscribe()
Observable.just("10+20", "123", "10x20", "10")
.flatMap(new Func1<String, Observable<String>>() {
@Override
public Observable<String> call(String s) {
//if something true
//else continue next map
return null;
}
})
.map(new Func1<String, String>() {
@Override
public String call(String s) {
//do something one
return null;
}
})
.map(new Func1<String, String>() {
@Override
public String call(String s) {
//do something two
return null;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
//end
}
});
可以吗?
可以在flatMap算子中嵌套变换
Observable.just("10+20", "123", "10x20", "10")
.flatMap(new Func1<String, Observable<String>>() {
@Override
public Observable<String> call(String string) {
if (condition) {
return Observable.just(string);
} else {
return Observable.just(string)
.map(new Func1<String, String>() {
@Override
public String call(String s) {
//do something one
return null;
}
})
.map(new Func1<String, String>() {
@Override
public String call(String s) {
//do something two
return null;
}
})
}
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
//end
}
});
如以下示例代码,如果 flapMap 中的内容为真,我可以忽略一些转换并立即 运行 subscribe()
Observable.just("10+20", "123", "10x20", "10")
.flatMap(new Func1<String, Observable<String>>() {
@Override
public Observable<String> call(String s) {
//if something true
//else continue next map
return null;
}
})
.map(new Func1<String, String>() {
@Override
public String call(String s) {
//do something one
return null;
}
})
.map(new Func1<String, String>() {
@Override
public String call(String s) {
//do something two
return null;
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
//end
}
});
可以吗?
可以在flatMap算子中嵌套变换
Observable.just("10+20", "123", "10x20", "10")
.flatMap(new Func1<String, Observable<String>>() {
@Override
public Observable<String> call(String string) {
if (condition) {
return Observable.just(string);
} else {
return Observable.just(string)
.map(new Func1<String, String>() {
@Override
public String call(String s) {
//do something one
return null;
}
})
.map(new Func1<String, String>() {
@Override
public String call(String s) {
//do something two
return null;
}
})
}
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
//end
}
});