2017-09-24 3 views
0

このシナリオでは、整数値のSetに基づいてリスト内のデータモデルを更新します。一連の値に基づいてデータモデルを更新する方法

たとえば有するのArrayList:

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

は、今は、基本的に渡される生徒の生徒IDを表すこと内側 学生IDが{1、2、...}有する整数の集合を有します。

のarrayListを保持します。onNextのメソッドobserverです。

私が整数Setから得た学生IDに基づいて学生オブジェクトのフィールドhasPassedを更新するにはどうすればよいですか?私はこれを行うためにRxJava2を使用しようとしています。

答えて

1

flatmapIterable()oberatorを使用して設定した学生を反復処理することで開始できます。これは、アイテムを1つずつ処理して処理します。その後、flatmap()を使用して、あなたのリストに戻るToListメソッド()演算子を使用してあなたに一つのアイテムを変換したくないので...それは、flatMapを使用する必要は、

モハメドの答えが受け入れ可能であるにもかかわらず
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 
    }); 
+0

cool!理由は分かりませんが、 '});'の近くに "missing return statement"というエラーが表示されます。 – beerBear

+1

私は答えを –

+0

でも '})と同じエラーを更新します。toList()。subscribe('}内のreturn文がありません) ' – beerBear

1

のようなもののように見えるが存在しないことがありアイテムのストリームを作成しますが、アイテムを別のアイテムに変換するだけです。除いて、私は不変クラスを使用するので、同じユーザーを再利用する必要はありませんが、同じプロパティを持つ別のユーザーを作成し、私の例では

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

:だから、より良い解決策はmap演算子を使用することですhasPassedブール値:不変性には多くの利点があり、可能であれば不変クラスを使用することをお勧めします。

関連する問題