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



该方案是基于整数值的Set更新列表中的数据模型。

例如,一个ArrayList具有:

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

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

我在我的observeronNext中掌握了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布尔值:不变性具有很大的优势,这是一个很好的优势尽可能使用不变的类的想法。

最新更新