Android

[Rx] 2. 연산자[2]

졸꾸맨 2020. 5. 9. 11:58

1. map

- 입력받은 데이터를 어떤 함수나 로직에 의해 데이터를 가공한다.

private val listIntArray = arrayOf(1,2,3,4,5,6,7,8,9)

fun AA() =
    Observable.fromArray(*listIntArray)
    .map { it+1 }
    .subscribe(::println)
            
//결과값
2
3
4
5
6
7
8
9
10

 

listIntArray 리스트의 원소값에 +1을 더해 콘솔에 출력해주는 코드이다.

map을 통해 입력받은 입력값에 +1로 데이터를 새로운 데이터로 가공한다.

 

2. filter

- 입력받은 데이터에서 원하는 데이터만 걸러낸다.

 fun BB()=
     Observable.range(1,200)
         .filter{ it % 10 == 0 }
         .subscribe(::println)
         
//결과 값
10
20
30
40
50
60
70
80
90
100
110
120
130
140
150
160
170
180
190
200

range를 이용하여 1, 200의 숫자를 입력받고 filter를 이용하여 입력받은 값을 10과 나눠 0이나 오는 입력데이터를 걸러낸다.

*** 비슷한 함수들 ***

- first(default) : Observable의 첫 번째 값을 필터, 값이 없이 완료되면 기본값을 리턴

- last(default) : 마지막 값을 리턴

- take(N) : 처음 부터 N개의 값을 리턴

- takelast(N) : 마지막 부터 N개의 값을 리턴

- skip(N) : 처음 부터 N개의 값을 스킵

- skiplast(N) : 마지막 으로부터 N개의 값을 스킵

 

 

3. reduce

- 발해한 데이터를 모두 사용하여 데이터를  취합하여 발행한다

fun CC() =
    Observable.range(1,10)
       .reduce{ item1,item2 -> item1*item2 }
       .subscribe(::println)
       
//결과값

3628800

range를 이용하여 1,10을 입력하고 입력받은 데이터를 reduce를 이용하여 이전 아이템과 현재 아이템을 더 중첩으로 곱해준다. 해서 3628800으로 결과값이 나온다. 다음과 같은 계산이다.

 

1   ×   2   ×   3   ×   4   ×   5   ×   6   ×   7   ×   8   ×   9   ×   10