Collection 함수들

RxJava에서 자주 쓰이는 함수중 하나인 Collection형태를 알아보자.

우선 toList() 이다.

여러개의 배출을 하나의 리스트로 만들어주는 것이다. 주의점은 리턴값이 Single<T> 인것을 유념하자.

아주 간단한 예제를 보자.

ToList

fun testToList(){
    Observable.just("Alpha" , "Beta" , "Gamma" , "Delta" , "Epslion")
            .toList() //Single로 배출
            .subscribeBy(
                    onSuccess = {
                        println(it)
                    }
            )
}
====================================
[Alpha, Beta, Gamma, Delta, Epslion]

정렬을 원할땐 ToSortedList를 사용하면 된다.

ToSortedList

Observable.just(3,1,5,20,2,7)
    .toSortedList()
    .subscribeBy(
            onSuccess = {
                println(it)
            }
    )
====================================
[1, 2, 3, 5, 7, 20]

Key + Value 로 묶을수 있는 Map 도 제공한다.

ToMap

Observable.just("Alpha" , "Beta" , "Gamma" , "Delta" , "Epslion")
    .toMap { it.toCharArray()[0] }
    .subscribeBy(
            onSuccess = {
                println(it)
            }
)
// {A=Alpha, B=Beta, D=Delta, E=Epslion, G=Gamma}

ToMap 인자를 다르게

Observable.just("Alpha" , "Beta" , "Gamma" , "Delta" , "Epslion")
            .toMap({
                it.toCharArray()[0]
            },
            String::length,{
                ConcurrentHashMap()
            })
            .subscribeBy(
                    onSuccess = {
                        println(it)
                    }
            )
//{A=5, B=4, D=5, E=7, G=5}

만약 같은 키에 여러개의 중복된 값이 있는 경우 마지막 아이템이 나온다.

Observable.just("Alpha" , "Beta" , "Gamma" , "Delta" , "Epslion")
            .toMap(String::length)
            .subscribeBy(
                    onSuccess = {
                        println(it)
                    }
            )
// {4=Beta, 5=Delta, 7=Epslion}

그래서 이 부분을 수정하면 toMultiMap 이란것도 제공한다.

ToMultiMap

Observable.just("Alpha" , "Beta" , "Gamma" , "Delta" , "Epslion")
            .toMultimap(String::length)
            .subscribeBy(::println)

// {4=[Beta], 5=[Alpha, Gamma, Delta], 7=[Epslion]}


+ Recent posts