-
집계 연산자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