该方案是基于整数值的Set
更新列表中的数据模型。
例如,一个ArrayList具有:
Student {
name: "abc",
id: 1,
hasPassed: false
}...
现在我有一组整数,这些整数基本上具有其中的学生ID {1,2,...}表示通过学生的学生ID。
我在我的observer
的onNext
中掌握了Student
的阵列列表。
如何根据我从整数Set
获得的学生ID更新学生对象的hasPassed
字段?我正在尝试使用rxjava2进行此操作。
您可以通过使用FlatMapiterable()Oberator迭代的学生开始,该oberator将一一发射项目来处理,然后您可以使用FlatMap()在发射的项目,最后,如果您要退回列表,请使用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
});
即使穆罕默德的答案是可以接受的,也不需要使用 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
布尔值:不变性具有很大的优势,这是一个很好的优势尽可能使用不变的类的想法。