Rx에서 scan과 Reduce의 차이

3239 단어 JavaRxRxJava

TL;DR

  • reducecomplete를 진행하기 전에 값을 되돌려주지 않음
  • scannext로 하나씩 되돌아오는 값
  • 순차적으로 값을 이용하고 싶을 때scan 사용하세요
  • 다른 언어의 Reduce

    # in Ruby
    # reduceはinjectのalias
    (0..10).inject { |sum, n| sum + n }
    
    // in JavaScript (ECMAScript 2015)
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10].reduce((sum, n) -> sum + n)
    

    Reduce operator


    apply a function to each item emitted by an Observable, sequentially, and emit the final value

    ReactiveX - Reduce operator
    emit the final value에서 보듯이 결과를 accumultor에 저장하고 마지막 onComplete() 값을 되돌려줍니다.
    데이터가 모두 유통되기 전까지는 값이 다음 방법으로 흘러가지 않는다는 것이다.

    Scan operator


    apply a function to each item emitted by an Observable, sequentially, and emit each successive value

    ReactiveX - Scan operator
    emiteach successivevalue처럼 accumulator의 값이 하나하나 흘러나온다.
    데이터 하나만 먹으면 토한다는 얘기다.

    언제 주의하면 좋을까


    이전 결과를 이용하여 값을 변환하고 그 결과를 차례로 이용할 때(센서 값에 low pass filter 같은 것을 곱했을 때) onNext()를 사용하면 센서 값의 읽기를 멈추지 않으면 값이 돌아오지 않습니다.그럼 울분을 참으며 쓰세요.

    References

  • ReactiveX - Reduce operator
  • ReactiveX - Scan operator
  • 좋은 웹페이지 즐겨찾기