Jol*_*sta 1 java android arraylist rx-java2
用于过滤列表RxJava2.不知何故让它发挥作用.但问题是,它在回调中仅返回List中的一个项目Consumer(大小始终为1)
这是代码:
Observable.fromIterable(arraylist)
.filter(new Predicate<BasicListModel>() {
@Override
public boolean test(BasicListModel model) throws Exception {
return true; //returning true for all items in filter
}
})
.toList()
.observeOn(Schedulers.computation())
.subscribe(new Consumer<List<BasicListModel>>() {
@Override
public void accept(List<BasicListModel> models) throws Exception {
Log.i("TAG"," size:"+models.size());
}
});
Run Code Online (Sandbox Code Playgroud)
我是RxJAva1或RxJava2的新手.
您可以按照以下适当的迭代进行过滤
Observable.fromIterable(offerBasicListModel)
.observeOn(Schedulers.computation())
.filter(new Predicate<BasicListModel>() {
@Override
public boolean test(BasicListModel model) throws Exception {
if (model.isDownloading()) //assume
return true; // if true, object will redirect to `doOnNext`
else
return false;
}
})
.doOnNext(new Consumer<BasicListModel>() {
@Override
public void accept(BasicListModel model) throws Exception {
Log.d("objects one by one ->",model.getId());
}
})
.toList()
.subscribe(new Consumer<List<BasicListModel>>() {
@Override
public void accept(List<BasicListModel> model) throws Exception {
Log.d(TAG, "filtered list size: "+model.size());
}
});
Run Code Online (Sandbox Code Playgroud)
如果你支持java 8,那么
Observable.fromIterable(offerBasicListModel)
.observeOn(Schedulers.computation())
.filter(BasicListModel::isDownloading)
.doOnNext(
model ->Log.d(TAG,"filtered objects one by one ->",model.getId())
)
.toList()
.subscribe(model -> Log.d(TAG, "filtered list size: "+model.size()));
Run Code Online (Sandbox Code Playgroud)
UPDATE
自定义用户模型
public class UserModel {
private int age;
private String name;
public UserModel(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
执行年龄在18岁以上的过滤用户
ArrayList<UserModel> userModelArrayList = new ArrayList<>();
UserModel user;
for (int i = 0; i < 20; i++) {
if (i % 2 == 0)
user = new UserModel(25, "user" + i);
else
user = new UserModel(15, "user" + i);
userModelArrayList.add(user);
}
io.reactivex.Observable
.fromIterable(userModelArrayList)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.computation())
.filter(userModel -> userModel.getAge() > 18)
.toList()
.subscribe(new SingleObserver<List<UserModel>>() {
@Override
public void onSubscribe(Disposable d) {
/* to do */
}
@Override
public void onSuccess(List<UserModel> userModels) {
Log.d("userModels", " after filtering: " + userModels.size());
}
@Override
public void onError(Throwable e) {
/* to do */
}
});
Run Code Online (Sandbox Code Playgroud)
在这里,我可以实现10个过滤的用户对象onSuccess().
我建议你首先使用示例代码尝试这种方法,如果它正常工作,那么你可以修改和跟踪你做错的地方.
| 归档时间: |
|
| 查看次数: |
1255 次 |
| 最近记录: |