[RxJava] RxJava 제어 연산자

minnie_dev·2022년 2월 18일
0

RxJava

목록 보기
5/8
post-thumbnail

📝RxJava의 학습 순서
1. Observable 클래스를 명확하게 이해(특히 Hot Observable과 Cold Observable의 개념을 꼭 이해해야함)
2. 변환, 제어, 결합 연산자 등 카테고리별 주요 함수 공부
3. 스케줄러의 의미, subscribeOn()과 observeOn()함수의 차이
4. 그 밖의 디버깅, 흐름 제어함수


1. 제어 연산자

RxJava에서 제어 연산자란 입력 데이터 중 원하는 데이터를 골라내는 함수이다.
filter(), first(), take() 등이 있다.

🧩 filter()

filter는 Observable에서 원하는 데이터만 걸러내는 역할을 한다. 즉, 필요없는 데이터는 제거하고, 원하는 데이터만 filter()함수를 통과하게 된다.

objs변수에는 Observable이 발행하는 데이터가 들어가있다. filter()함수에는 짝수를 판별하는 Predicate타입의 함수로 만들어 넣어준다.
filter함수 안에는 Predicate(boolean 값을 리턴하는 함수형 인터페이스)를 인자로 넣는다.

Integer[] nums = {10,15,76,38,29

Observable.fromArray(nums)
        .filter(num->num%2==0)
        .subscribe(System.out::println);
10
76
38

🧩 filter()와 비슷한 함수들의 활용 예

  • first(default) : Observable의 첫번째 값을 필터. 만약에 값 없이 완료된다면 기본값을 리턴
  • last(default) : Observable의 마지막 값을 필터. 만약에 값 없이 완료된다면 기본값을 리턴
  • take(N) : 최초 N개의 값만 가져옴
  • takeLast(N) : 마지막 N개의 값만 필터
  • skip(N) : 최초 N개 값을 건너뜀
  • skipLast(N) : 마지막 N개 값을 건너뜀
Integer[] nums= {100,200,300,400,500};
Single<Integer> single;
Observable<Integer> source;

single = Observable.fromArray(nums).first(-1);
single.subscribe(data -> System.out.println("first() value = "+data));

single = Observable.fromArray(nums).last(999);
single.subscribe(data -> System.out.println("last() value = "+data));

source = Observable.fromArray(nums).take(3);
source.subscribe(data -> System.out.println("take(3) value = "+data));

source = Observable.fromArray(nums).takeLast(3);
source.subscribe(data -> System.out.println("takeLast(3) value = "+data));

source = Observable.fromArray(nums).skip(2);
source.subscribe(data -> System.out.println("skip(2) value = "+data));

source = Observable.fromArray(nums).skipLast(2);
source.subscribe(data -> System.out.println("skipLast(2) value = "+data));
first() value = 100
last() value = 500
take(3) value = 100
take(3) value = 200
take(3) value = 300
takeLast(3) value = 300
takeLast(3) value = 400
takeLast(3) value = 500
skip(2) value = 300
skip(2) value = 400
skip(2) value = 500
skipLast(2) value = 100
skipLast(2) value = 200
skipLast(2) value = 300

참고 https://beomseok95.tistory.com/24

profile
Android Developer

0개의 댓글