본문 바로가기

RxJava

[RxJava] 데이터 필터링 연산자

안녕하세요. 메로나입니다.

 

오늘은 데이터 필터링 연산자에 대해 공부하겠습니다.

 

filter 연산자는 무엇인가?
  • 전달받은 데이터가 조건에 맞는지 확인한 후, 결과가 true인 데이터만 통지합니다.
  • filter라는 단어의 사전적 의미가 무언가를 걸러낸다는 의미입니다.
@SuppressLint("CheckResult")
    public static void main(String[] args) {
        Observable<Integer> numbers = Observable.just(1, 2, 3, 4, 5, 6);
        numbers.filter(num -> num % 2 == 0)
                .subscribe(System.out::println);
    }
// 출력
2
4
6

 

distinct 연산자는 무엇인가?
  • 이미 통지된 동일한 데이터가 있다면 이후의 동일한 데이터는 통지하지 않습니다.
  • distinct는 '명확하게 구별되는' 이라는 뜻입니다.
@SuppressLint("CheckResult")
    public static void main(String[] args) {
        Observable<Integer> source = Observable.just(1, 2, 3, 4, 5, 1, 2, 3, 4, 5);
        source.distinct().subscribe(System.out::println);
    }
// 출력
1
2
3
4
5

 

take 연산자는 무엇인가?
  • 파라미터로 지정한 개수나 기간이 될 때까지 데이터를 통지합니다.
  • 지정한 범위가 통지 데이터보다 클 경우 데이터를 모두 통지하고 완료합니다.
public static void main(String[] args) {
        Observable<Integer> numbers = Observable.just(1, 2, 3, 4, 5, 6);
        numbers.take(3)
                .subscribe(System.out::println);
    }
// 출력
1
2
3

 

takeUntil은 무엇인가?
  • 파라미터로 지정한 조건이 true가 될 때까지 데이터를 계속 통지합니다.
  • 파라미터로 지정한 Observable이 최초 데이터를 통지할 때까지 데이터를 계속 통지합니다.
// 1번 방법
public static void main(String[] args) {
        Observable<Integer> numbers = Observable.just(1, 2, 3, 4, 5, 6);
        numbers.takeUntil(num -> num == 3)
                .subscribe(System.out::println);
    }
// 출력
1
2
3



// 2번 방법
  public static void main(String[] args) {
        Observable.interval(1000, TimeUnit.MICROSECONDS)
                        .takeUntil(Observable.timer(3000, TimeUnit.MICROSECONDS))
                        .subscribe(System.out::println);
		
        // interval은 main Thread에서 돌아가지 않기 때문에
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }	
 // 출력
 0
 1
 2

 

skip은 무엇인가?
  • 파라미터로 지정한 숫자만큼 데이터를 건너뛴 후 나머지 데이터를 통지합니다.
  • 파라미터로 지정한 시간 동안에는 데이터를 통지를 건너뛴 후 지정한 시간 이후, 나머지 데이터를 통지합니다.
// 1번 방법
public static void main(String[] args) {
        Observable<Integer> numbers = Observable.just(1, 2, 3, 4, 5, 6);
        numbers.skip(3)
                .subscribe(System.out::println);
    }
// 출력
4
5
6

// 2번 방법
 public static void main(String[] args) {
        Observable.interval(1000L, TimeUnit.MICROSECONDS)
                // time
                .skip(3000L, TimeUnit.MICROSECONDS)
                .takeUntil(Observable.timer(10000L, TimeUnit.MICROSECONDS))
                .subscribe(System.out::println);

        try {
            Thread.sleep(5000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
// 출력
3
4
5
6
7
8
9

 

filter 연산자를 공부하였는데 생각보다 다양한 연산자가 있었습니다.

filter 연산자는 실무에서도 많이 활용할 것 같은데 활용하면서 익숙해지려고

노력해야할 것 같습니다.

20000~

'RxJava' 카테고리의 다른 글

[RxJava] RxJava 퀴즈 문제  (0) 2025.02.09
[RxJava] 데이터 변환 연산자  (0) 2025.02.06
[RxJava] 생성 연산자  (0) 2025.01.30
[RxJava] Single vs Maybe vs Completable  (0) 2025.01.27
[RxJava] Flowable과 Observable의 차이점  (0) 2025.01.23