Notice
Recent Posts
Recent Comments
올해는 머신러닝이다.
[RxKotlin] 예제로 배워보는 그룹핑 방법 본문
그룹핑
하나의 Observable을 여러개의 옵저버로 패턴에 맞게 분리하는 방법에 대해서 알아보자.
4개의 문자 배열이 있다.
"Alpha" , "Beta" , "Delat" , "Epsilon"
이걸 문자 길이에 맞게끔 분리를 해보자.
val source = Observable.just("Alpha" , "Beta" , "Delat" , "Epsilon")
val lengthGroupObservable = source.groupBy { it.length } //groupBy 가 중요함
lengthGroupObservable.flatMapSingle { it.toList() }
.subscribeBy(
onNext = {
println(it)
}
)
======================
[Beta]
[Alpha, Delat]
[Epsilon]
보는 것과 같이 문자열 수에 따라 나뉘어 진다.
반환형태는 GroupedObservable
으로 나온다.
그리고 정렬시 키값을 가져올 수 있다.
여기서 말하는 키값은 length 가 될것이다.
val source = Observable.just("Alpha" , "Beta" , "Delat" , "Epsilon" , "Te")
val lengthGroupObservable = source.groupBy { it.length }
lengthGroupObservable.flatMapSingle {grp ->
grp.reduce("" , { x,y ->
if(x.isEmpty()){
y
}else{
"$x,$y"
}
}).map {
"${grp.key} : $it"
}
}
.subscribeBy(
onNext = {
println(it)
}
)
===================================
2 : Te
4 : Beta
5 : Alpha,Delat
7 : Epsilon
혹시 reduce
관련 해서 기억이 안날수 있으니 다시 설명하자면
발행한 데이터를 모두 사용하여 어떤 최종적인 결과 데이터를 합성할 때 활용가능하다.
즉 보통 Observable에 입력된 데이터를 필요한 map으로 매핑하고 , 원하는 데이터만 추출할 때 는 불필요한 데이터를 걸러내는 filter() 함수를 호출한다. 또는 상황에 따라 발행된 데이터를 취합하여 어떤 결과를 만들어낼 때는 reduce 계열의 함수를 사용한다.
val sources = listOf("1","2","3")
Observable.fromIterable(sources).reduce{ value1 , value2 ->
"$value2 ( $value1 )"
}.subscribe( ::println )
============================
3 ( 2 ( 1 ) )
'스터디 > RxJava2' 카테고리의 다른 글
[RxKotlin] Collection 함수 기본 알아보기 (0) | 2018.02.01 |
---|---|
[RxKotlin] 두개의 리스트를 비교시 - Combinlatest 사용 (0) | 2018.01.23 |
[RxKotlin] Lift 연산자에 대해서 알아보자 (0) | 2018.01.22 |
RxKotlin Using 사용해보자 (0) | 2018.01.19 |
RxKotlin 정리 (0) | 2017.11.06 |