버그 잡이

[RxJava] Filter Operator - filter(), distinct(), take(), takeWhile() 본문

모던 안드로이드/RxJava

[RxJava] Filter Operator - filter(), distinct(), take(), takeWhile()

버그잡이 2020. 5. 1. 13:44

https://codingwithmitch.com/courses/rxjava-rxandroid-for-beginners/rxjava-operators-take-takewhile/

(위 블로그 내용을 복습차 정리했습니다.)

 

 

 

Filter Operator는 이름 그대로 특정 조건으로 거르는 operator이다.

observable 중에서 내가 지정한 조건을 통과하는 item만 가져온다.

 

특징으로 선별작업은 backgroun thread에서 이루어진다. -> UI에 영향 X

 

 

 

.filter()

 

원하는 조건에 맞는 item만 가져온다.

 

.filter(new Predicate<Task>() {
                @Override
                public boolean test(Task task) throws Exception {
                    return task.isComplete();
                }
            })

 

 

.distinct()

 

중복값을 제외하고 가져온다. (약간 set 느낌이 난다.)

 

.distinct(new Function<Task, String>() { // <--- CORRECT 
            @Override
            public String apply(Task task) throws Exception {
                return task.getDescription();
            }
        })

 

- 기억할 것은 return type을 String으로 하는 점이다. ( <Task, Task>로 하면 실행되지 않는다. )

- 추측이지만 반환값을 설정함과 동시에 비교할 항목을 정하는 것 같다.

 

 

 

 

 

.take()

 

원하는 갯수만큼만 가져온다.

 

Observable<Task> taskObservable = Observable
        .fromIterable(DataSource.createTasksList())
        .take(3)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread());

 

 

 

 

.takeWhile()

 

특정 조건이 false되기 이전까지만 가져온다.

 

Observable<Task> taskObservable = Observable
        .fromIterable(DataSource.createTasksList())
        .takeWhile(new Predicate<Task>() {
            @Override
            public boolean test(Task task) throws Exception {
                return task.isComplete();
            }
        })
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread());

 

반응형
Comments