2022.08.03 - [💻 프로그래밍] - [RxJava] #3 Operators(1)
이전 포스팅에서는 Observable을 생성하는 Operator에 대해 알아봤습니다
오늘은 Observable을 변형하는 연산자에 대해 알아보겠습니다 🧐
예시 코드는 rxjava3:rxjava:3.0.7 기준입니다
변형 연산자
💡 map
• 변형 연산자 중 가장 기본적이고 많이 쓰이는 연산자
val origin = Observable.just(1, 2, 3)
origin.map { it * 10 }.subscribe {
println(it)
}
// 10 20 30 출력
💡 flatMap
• 변환시킨 Observable의 방출되는 아이템 또한 병합해 다시 아이템을 재방출시킴
//구구단 출력
Observable.range(2, 8)
.flatMap { x -> Observable.range(1, 9)
.map { y -> String.format("%d * %d = %d", x, y, x * y) } }
.subscribe { println(it) }
💡 buffer
• Observable이 발행한 아이템을 묶어서 리스트로 발행
• 에러가 발생 시 , 에러를 즉시 발행
Observable.range(2, 8)
.buffer(2)
.subscribe({ arr ->
println("-----buffer----")
println(arr.joinToString { it.toString() })
}, {
it.printStackTrace()
})
💡 scan
• Observable이 순차적으로 발행한 아이템에 연산을 적용
• 최소 2개 이상의 아이템이 있어야하므로, 처음 아이템은 그대로 출력
• 아이템들이 누적되므로 '누산기(accumulator)'라고도 함
Observable.just(1, 3, 5, 7, 9)
.scan { t1, t2 ->
println(String.format("%d*%d = %d", t1, t2, t1 * t2))
t1 * t2
}.subscribe()
💡 groupBy
• 말 그대롭니다
• 아이템들을 특정 조건으로 그룹화하여 GroupObservable로 재정의
Observable.range(1, 10)
.groupBy { if (it % 2 == 0) "짝" else "홀" }
.subscribe {
it.subscribe { item ->
println(it.key + ": $item")
}
}
RxJava의 연산자는 아직 끝이 아닙니다 다음은 3탄으로 돌아올게요 :)
궁금하신 점이나 의견이 있으시면 댓글 부탁드립니다 감사합니다 😊
[아키텍처를 알아야 앱 개발이 보인다] 책을 많이 참고했습니다 찰스님 짱👍🏻
'💻 프로그래밍' 카테고리의 다른 글
[🔥Coroutine] # 1 Coroutine을 배워봅시다 (0) | 2022.08.30 |
---|---|
[RxJava] #5 Operators(3) 필터링, 결합 연산자 (0) | 2022.08.22 |
[RxJava] #3 Operators(1) 생성연산자 (0) | 2022.08.14 |
[RxJava] #2 Subject (0) | 2022.08.02 |
[RxJava] #1 (0) | 2022.08.01 |