如何在特定条件下使用 RxJava Function .filter(),我只想要 id 为 168 的数据,这是正确的做法还是必须更改我的代码样式给我您宝贵的建议。(不使用 RetroLambda :))
NetworkRequest networkRequest = new NetworkRequest(this);
RestApi api = networkRequest.getInstance().create(RestApi.class);
subscription = api
.school()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Response<SchoolList>>() {
@Override
public void onCompleted() {
Log.d(TAG, "onCompleted: completed");
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "onError: on Error");
e.printStackTrace();
}
@Override
public void onNext(Response<SchoolList> schoolResponse) {
Log.d(TAG, "onNext: " + schoolResponse.getSchoolList().size());
}
});
我有回应
{ "schoolList": [
{
"name": "A University",
"id": "168"
},
{
"name": "Alba Sciences",
"id": "271"
},
{
"name": "B University",
"id": "168"
}]
}
我已经尝试过这种方式,但注意到(下一个)
NetworkRequest networkRequest = new NetworkRequest(this);
RestApi api = networkRequest.getInstance().create(RestApi.class);
subscription = api
.school()
.filter(new Func1<Response<SchoolList>, Boolean>() {
@Override
public Boolean call(Response<SchoolList> schoolListResponse) {
Log.d(TAG, "condition: computing 2");
return schoolListResponse.getSchoolList().get(0).getId().equals("168");
}
})
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Response<SchoolList>>() {
@Override
public void onCompleted() {
Log.d(TAG, "onCompleted: completed");
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "onError: on Error");
e.printStackTrace();
}
@Override
public void onNext(Response<SchoolList> schoolResponse) {
Log.d(TAG, "onNext: " + schoolResponse.getSchoolList().size());
}
});