如何根据一组值更新数据模型

How to Update a Data Model based on a set of values

场景是根据 Set 个整数值更新列表中的数据模型。

例如一个 ArrayList 有:

Student {
    name: "abc",
    id: 1,
    hasPassed: false
}...

现在我有一组整数,基本上有 其中的学号 {1, 2, ...} 表示通过学生的学号。

我在 observer.

onNext 方法中获取了 Student 的数组列表

如何根据从整数 Set 中获得的学生 ID 更新学生对象的 hasPassed 字段?我正在尝试使用 RxJava2 来执行此操作。

您可以首先使用 flatmapIterable() 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
    });

即使 Mohamed 的回答可以接受,也没有必要使用 flatMap,因为您不想将一个项目转换为项目流,而只是将项目转换为另一个项目。所以更好的解决方案是使用 map operator:

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});

在我的示例中,我使用了不可变 class,因此您不必重复使用同一个用户,而是创建另一个具有相同属性的用户,hasPassed 布尔值除外:不变性有很多优点,尽可能使用不可变的 classes 是个好主意。