RxJava 의 FlatMap, From 그리고 filter 로 For문 에서 벗어나보자
RxJava의 장점중의 하나는 다양한 Operator의 제공인데요.
오늘은 FlatMap과 From을 사용하여서,
Observable이 흘려보내준 List아이템들을,
for문을 돌리지 않고 filter를 하여,
원하는 결과만을 얻을 수 있도록 하는 방법에 대해서 정리해보겠습니다.
혹시 RxAndroid 가 무엇인지에 대해서, 보고싶으시다면,
아래의 글을 참조해 주세요~.
1. FlatMap, From 그리고 filter
FlatMap은 Observable을 데이터를 가공해서, 다시 Observable을 방출해주는 Operator입니다.
FlatMap에 대해서는 아래 링크를 참조해주세요.
>>> RxJava (RxAndroid)의 Map 과 FlatMap 메소드를 알아보자 <<<
From은 Java의 Collection로부터 아이템들을 하나하나씩 흘려내보내주어서,
마치 for문을 돌리는 것같은 효과를 주는데요.
이해를 돕기 위해서 마블 다이어그램을 보도록 하겠습니다.
(마블다이어그램에 관해서는 옆의 링크를 눌러주세요 >>>RxJava (RxAndroid) 의 마블 다이어그램을 이해해보자.)
하나의 Collections를 받아서, 각각의 아이템으로 흘려보내준다는 것을 알 수 있습니다.
filter는 Operator의 단어만 봐도 아실것 같은데요.
마블 다이어그램을 먼저 보도록 하겠습니다.
원하는 형태의 아이템만 filter해서 흘려보는군요.
2. FlatMap 과 Filter 로 For문 에서 벗어나보자
그럼 실제로 구현해 보도록 하겠습니다.
먼저 자주 사용하던, Student 데이터 클래스를 준비했구요.
Random하게 데이터를 생성해서 데이터를 넣었습니다.
화살표가 표시된 부분이 점수인데요. (아쉽게도 점수들이 많이 낮네요.)
이제 위에서 정리해본, FlatMap, From 그리고 Fliter를 총동원 해야 겠네요.
먼저, RealmResults타입의 list로 흘러나오는 아이템들을,
from메소드를 이용해서, 개별아이템으로 흘러나오게 하구요.
다음으로 Filter Operator를 이용해서, 아래와 같이 30점이상인 학생들과 점수만 리스트에 나오도록 하였습니다.
For문을 돌려서 거르지 않았는데도,
아래와 같이 점수가 30점 이상인 학생들만 리스트에 나오도록 할 수 있었습니다.