woong's

RxJava , RxAndroid 사용하기[2 : filter , map 사용] 본문

Develop/Android

RxJava , RxAndroid 사용하기[2 : filter , map 사용]

dlsdnd345 2016. 2. 14. 13:16
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

RxJava , RxAndroid 사용하기[2 : filter , map 사용]


안녕하세요.

RxJava , RxAndroid 사용하기[1 : 흐름 파악하기]

앞 포스트에서 RxJava 흐름을 알아 보았습니다.

이해가 안되시면 앞포스트를 보고 오시면 좀더 도움이 될것 같습니다.


1. 설명


이번 포스트에서는 filter , map 을 알아보려 합니다.

앞 포스트가 선행이 되야 2번재 포스트가 의미가 있는것 같습니다.


map : 데이터 가공

filter : 데이터 filter 

역할을 하는것 같습니다.


2. 사용 방법


Map

Observable 을 통해서 넘어오는 데이터를 변형 하거나 가공하고 싶은경우가 있다면,

Observable 로 들어오는 데이터를 변형해서 넣어주면 되는 방법이 있다.


1
2
3
Observable.just(“Hello, world! -Dan”) 
.subscribe(s -> System.out.println(s));
 
cs


하지만 어떤 조건에 의할때만 추가 되야 한다면 .. 곤란한 경우가 생길수 있다.

이러한 경우에 Map을 통해서 데이터를 가공할수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
Observable.just("hello world")
        .map(new Func1<StringString>() {
            @Override
            public String call(String s) {
                return s + "RxJava";
            }
        })
        .subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                Log.i(TAG, ">>> onNextAction  : " + s);
            }
        });
cs


위 코드를 보면 Observable 로 넘어온 데이터가 map call 함수에서 가공되는것을 볼수 있다.

가공기 되어서 subscribe call 함수로 넘어 간다.


map call 함수에서 if , for 문등을 통해서 들어오는 데이터를 가공해서 subscribe 에게 전달

해줄수 있다. 응용하기에 따라 무한하게 사용이 가능한것 같다.


Filter


두번째로는 Filter 기능이 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Observable.just("hello world")
        .filter(new Func1<String, Boolean>() {
            @Override
            public Boolean call(String s) {
                if (s.contains("hello")) {
                    return true;
                } else {
                    return false;
                }
            }
        })
        .subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                Log.i(TAG, ">>> onNextAction  : " + s);
            }
        });
cs


 위와 같이 filter 함수를 보면 observable 을 통해서 넘어온 데이터에 hello 가 포함되어있는지를 확인 하고 있다.

포함되어 있지 않으면 false 가 넘어가게 되어서 subscribe 가 호출되지 않는다.

지금은 간단히 확인해기 위해서 글자 포함을 사용하였지만 , 실사용에서는 객체의 상태값을 비교한다던가

하면 유용하게 사용할수 있을것 같다.




3. 결론


여기까지 사용해본 결과로 데이터 가공, 데이터 필터등 따로 필터를 하거나 가공을 할필요 없이

할수 있는 편리성이 있었습니다. 이것 외에도 여러가지 기능들이 있습니다.

timer 를 통해서 몇초후 실행 , interval 을 통해서 polling 을 이용할수도 있고,

저또한 학습을 하고 있는 단계이기때문에 다는 알지 못하지만 , 유연성있게 여러가지 기능을 

추가할수 있는것 같습니다. 

Comments