<RxJava>Distinct

진섭·2023년 6월 1일
0

RxJava

목록 보기
11/20
post-thumbnail

📌 Distinct 연산자란?

Distinct는 Observable이 배출하는 항목들 중 중복을 제거한 항목들을 배출한다.

📌 Distinct 사용법

  • 사용법은 먼저 Observable에서 just 함수를 사용해 차례대로 방출하도록 하고
  • distinct() 연산자를 사용하여 중복된 아이템을 제거합니다.
  • 결과를 구독합니다. 각 아이템을 받아와서 println() 함수를 사용하여 출력합니다.
 Observable.just(1, 2, 2, 3, 4, 4, 5)
        .distinct()
        .subscribe { println(it) }

실행결과

1
2
3
4
5

📌예제

이번에도 뉴진스 리스트를 이용해 예제를 만들어 보도록 하겠습니다.
제가 만들어볼 예제는 뉴진스 5명의 멤버 리스트에서 똑같은 하니를 추가해 중복이 되게 하여 중복을 제거해 보도록 하겠습니다.

  1. 중복된 아이템을 제거하기 위한 distinct() 함수 생성
  • 이 함수는 NewJeans 데이터 클래스를 Observable를 통해 방출 하도록 하겠습니다.
  • Observable이 fromIterable() 함수를 사용하여 newJeansList의 각 NewJeans 객체를 하나씩 방출하는 Observable을 리턴합니다.
fun distinct(): Observable<NewJeans> {
    return Observable.fromIterable(newJeansList)
}
  1. main 함수에서 distinct() 함수를 호출하겠습니다.
  • 먼저 주석 부분은 중복된 요소를 age 속성을 기준으로 판단하여 제거한다는 의미입니다.
  • 저 주석 부분을 실행하면 민지와 하니가 나이가 같기 때문에 민지만 출력이 되고 하니는 출력이 안될 것 입니다.
  • .distinct() 이 부분을 실행하면 리스트에서 중복이 되는 부분을 제거해 준다.
  • subscribe 함수를 사용하여 결과를 구독하고, 각 중복이 제거된 NewJeans 객체를 Logcat을 통해 결과를 확인해 보도록 하겠습니다.
        distinct()
//        .distinct {
//            it.age
//        }
            .distinct()
            .subscribe(
                {
                    Log.d("distinct", "onNext : $it")

                },
                {
                    Log.d("distinct", "onError ${it}")
                },
                {
                    Log.d("distinct", "중복을 제거")
                }
            ).let { _ -> }

    }
}

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

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

실행결과

       .distinct {
            it.age
        }

distinct()

profile
Android 개발자

0개의 댓글