모던 안드로이드/RxJava
[RxJava] Filter Operator - filter(), distinct(), take(), takeWhile()
버그잡이
2020. 5. 1. 13:44
(위 블로그 내용을 복습차 정리했습니다.)
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());
반응형