ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 집계 연산자
    BackEnd/RxJava 2023. 7. 13. 07:00
    반응형

    count

    • Observable이 통지한 데이터의 총 개수를 통지합니다.
    • 총 개수만 통지하면 되므로 결과값은 Single로 반환합니다.
    • 데이터의 총 개수를 통지하는 시점은 완료 통지를 받은 시점입니다.

    package com.itvillage.chapter05.chapter0509;
    
    import com.itvillage.common.SampleData;
    import com.itvillage.utils.LogType;
    import com.itvillage.utils.Logger;
    import io.reactivex.Observable;
    
    /**
     * count를 이용하여 차량의 총 대수를 계산하는 예제
     */
    public class ObservableCountExample01 {
        public static void main(String[] args) {
            Observable.fromIterable(SampleData.carList)
                    .count()
                    .subscribe(data -> Logger.log(LogType.ON_NEXT, data));
        }
    }

     

    reduce

    • Observable이 통지한 데이터를 이용해서 어떤 결과를 일정한 방식으로 합성한 후, 최종 결과를 반환합니다.
    • Observable이 통지한 데이터가 숫자일 경우 파라미터로 지정한 함수형 인터페이스에 정의된 계산 방식으로 값을 집계할 수 있습니다.

    package com.itvillage.chapter05.chapter0509;
    
    import com.itvillage.utils.LogType;
    import com.itvillage.utils.Logger;
    import io.reactivex.Observable;
    
    /**
     * reduce를 이용해 1부터 10까지의 sum을 구하는 예제(초기값 없음)
     */
    public class ObservableReduceExample01 {
        public static void main(String[] args) {
            Observable.just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
                    .doOnNext(data -> Logger.log(LogType.DO_ON_NEXT, data))
                    .reduce((x, y) -> x + y)
                    .subscribe(result -> Logger.log(LogType.ON_NEXT, "# 1부터 10까지의 누적 합계: " + result));
        }
    }
    package com.itvillage.chapter05.chapter0509;
    
    import com.itvillage.utils.LogType;
    import com.itvillage.utils.Logger;
    import io.reactivex.Observable;
    
    /**
     * reduce를 이용해 1부터 10까지 sum을 구하는 예제(초기값 있음)
     */
    public class ObservableReduceExample02 {
        public static void main(String[] args) {
            Observable.just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    //                .doOnNext(data -> Logger.log(LogType.DO_ON_NEXT, data))
                    .reduce(0, (x, y) -> {
                        Logger.log(LogType.PRINT, "# reduce 입력 값 : " + x + ", " + y);
                        return x + y;
                    })
                    .subscribe(data -> Logger.log(LogType.ON_NEXT, data));
        }
    }

     

    scan

    • reduce 연산자는 최종 결과만 출력하지만, scan 연산자는 집계 중간 결과를 계속해서 출력합니다.
    package com.itvillage.chapter05.chapter0509;
    
    import com.itvillage.utils.LogType;
    import com.itvillage.utils.Logger;
    import io.reactivex.Observable;
    
    /**
     * scan을 이용해 1부터 10까지의 sum을 구하는 예제(초기값 없음)
     * - 집계 중간 결과를 계속해서 출력한다.
     */
    public class ObservableScanExample01 {
        public static void main(String[] args) {
            Observable.just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
                    .doOnNext(data -> Logger.log(LogType.DO_ON_NEXT, data))
                    .scan((x, y) -> x + y)
                    .subscribe(result -> Logger.log(LogType.ON_NEXT, "# 1부터 10까지의 누적 합계: " + result));
        }
    }

     

     

     

    [참고 자료]

    반응형

    'BackEnd > RxJava' 카테고리의 다른 글

    스케쥴러(Scheduler)  (0) 2023.07.15
    Subject  (0) 2023.07.14
    조건과 불린 연산자  (0) 2023.07.13
    유틸리티 연산자  (0) 2023.07.09
    에러 처리 연산자  (0) 2023.07.08

    댓글

Designed by Tistory.