<RxJava>GroupBy

진섭·2023년 6월 3일
0

RxJava

목록 보기
16/20
post-thumbnail

📌 GroupBy 연산자란?

원본 Observable이 배출하는 항목들을 키(Key) 별로 묶은 후 Observable에 담는다. 이렇게 키 별로 만들어진 Observable들은 자기가 담고 있는 묶음의 항목들을 배출한다.

📌 GroupBy 사용법

GroupBy를 사용해 뉴진스에서 19세 이상인 멤버들만 묶어 보도록 하겠습니다.

  • groupBy() 함수에서 newJeansList에 있는 NewJeans 객체들을 하나씩 발행하는 옵저버블이 생성합니다.
  • groupBy() 함수를 호출합니다. groupBy 연산자는 기준으로 사용할 age 값을 키(key)로 설정하여 옵저버블의 항목을 그룹화합니다.
  • filter 연산자는 각 그룹화된 옵저버블의 키를 확인하고, 키(key)가 19 이상인 멤버들만을 필터링합니다.
  • subscribe 함수를 사용하여 옵저버블을 구독하고, 각 그룹의 항목에 대한 처리를 수행합니다.
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        groupBy()
            .groupBy {
                it.age
            }
            .filter{
                it.key!! >=19
            }
            .subscribe(
                { group ->
                    group.subscribe(
                        {
                            Log.d("groupBy", "key : ${group.key} - value : $it")
                        }, {
                            Log.d("groupBy", "onError ${it}")
                        }
                    ).let { }

                },
                {
                    Log.d("groupBy", "onError ${it}")
                },
                {
                    Log.d("groupBy", "")
                }
            ).let { _ -> }

    }
}

val newJeansList = mutableListOf<NewJeans>(
    NewJeans(1, "민지", 20),
    NewJeans(2, "하니", 20),
    NewJeans(3, "다니엘", 19),
    NewJeans(4, "해린", 18),
    NewJeans(5, "혜인", 16),
)


data class NewJeans
    (
    val id: Long,
    val name: String,
    val age: Int
)

fun groupBy(): Observable<NewJeans> {
    return Observable.fromIterable(newJeansList)
}

실행결과

profile
Android 개발자

0개의 댓글