안녕하세요. 메로나입니다.
오늘은 데이터 필터링 연산자에 대해 공부하겠습니다.
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 |