2017-03-02 3 views
1

두리스트가 있습니다 : List<Foo>List<Bar>입니다. List<Foo>의 각 항목에 대해 List<Bar>의 모든 항목을 확인하고 일치하는 값을 설정해야합니다. 오늘은이 코드를 사용하고 있습니다 :각각을 관찰 할 수있는 것으로 바꾸십시오.

fooList.forEach { foo -> 
    barList.forEach { bar -> 
     if(foo.id == bar.id) { 
      bar.name = foo.name 
     } 
    } 
} 
return barList 

나는 지금 내가 Observable<Foo>Observable<Bar>을 가지고 있기 때문에, 그것을 변경하고 싶습니다. 반응 프로그래밍을 사용하기 위해 코드를 어떻게 바꿀 수 있습니까?

답변

4

당신은 그것으로 이름과 실행 foo는 시퀀스 ID의 MapBar의를 수집 할 수 있습니다 :

Observable<Bar> bars = ... 
Observable<Foo> foos = ... 

bars 
    .toMap(bar -> bar.id, bar -> bar.name) 
    .flatMap(map -> 
     foos.doOnNext(foo -> { 
      String name = map.get(foo.id); 
      if (name != null) { 
       foo.name = name; 
      } 
     }) 
    ) 
    .subscribe(...) 
+0

그것은 작동하기 때문에 관찰 가 비어있는 경우, 그리고 관찰 에없는 아니에요 . 아무 일도 일어나지 않을 때 – pablobaldez

+0

막대가 비어 있으면 비어 있지 않은 foo와 어떻게 일치 할 것으로 예상합니까? – akarnokd

+0

이 비어 있으면 모든 foo가 이전 이름이 되겠지만 방출되어야합니다. – pablobaldez

관련 문제