该方案是基于Set
整数值更新列表中的数据模型。
例如,ArrayList具有:
Student {
name: "abc",
id: 1,
hasPassed: false
}...
现在我有一组基本上有的整数 其中的学生ID {1,2,...}表示已通过学生的学生ID。
我在Student
的{{1}}方法中掌握了onNext
的arrayList。
如何根据我从整数observer
获得的学生ID更新学生对象的hasPassed
字段?我正在尝试使用RxJava2来执行此操作。
答案 0 :(得分:1)
你可以通过使用flatmapIterable()oberator迭代学生设置,它将逐个发出项目来处理,然后你可以使用flatmap()对发出的项目应用操作,最后如果你想要你的list back使用toList()运算符..它可能看起来像
Observable.fromIterable(studentList) //emit items one by one
.flatMap(studentItem -> { //make an operation on item
if (ids.contains(studentItem.getId())) {
studentItem.setHasPassed(true);
}
return Observable.just(studentItem); //emit item
})
.toList() //get all items on a list
.subscribe(finalList->{
//handle the result
}, throwable -> {
//handlle error
});
答案 1 :(得分:1)
即使Mohamed的回答是可以接受的,也不需要使用flatMap
,因为您不想将一个项目转换为项目流,而只是将项目转换为另一个项目。因此,更好的解决方案是使用map
运算符:
Observable.fromIterable(list)
.map(student -> {
if (getPassedIds().contains(student.getId())) {
return new Student(student.getId(), student.getName(), true);
} else {
return student;
}
})
.toList()
.subscribe(students -> students.forEach(student -> logd(student.toString())),
throwable -> { //handle error});
在我的例子中,我使用了一个不可变类,所以你不必重用同一个用户,但你创建了另一个具有相同属性的用户,除了hasPassed
布尔值:immutability有很多优点,在可能的情况下使用不可变类是个好主意。