이름 그대로 특정 조건을 만족하는 항목들만 배출한다. 특정 조건을 만족하는 값을 필터링 하거나 불필요한 값을 거르고 싶을 때 사용하면 유용하게 쓸 수 있습니다.
@NonNull Predicate<? super T> predicate
를 파라미터로 받고 있고 @NonNull
어노테이션이 붙어있는걸 보아 null을 허용하지 않는 걸로 보이며 Predicate 내부를 들어가 보니 주어진 입력 값을 테스트하고 boolean을 반환하는 인터페이스가 있었습니다.ObservableFilter
을 인스턴스로 만들고 ObservableFilter는 public final Observable<T> filter(@NonNull Predicate<? super T> predicate) {
Objects.requireNonNull(predicate, "predicate is null");
return RxJavaPlugins.onAssembly(new ObservableFilter<>(this, predicate));
}
filter
를 사용을 해보겠습니다. class MainActivity : AppCompatActivity() {
companion object {
const val TAG = "MainActivity"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
filter().filter {
it.age == 20
}
.subscribe(
{
Log.d("filter", "onNext : $it")
},
{
Log.d("filter", "onError ${it}")
},
{
Log.d("filter", "20살인 뉴진스 멤버")
}
).let { _ -> }
}
}
fun filter():Observable<NewJeans>{
return Observable.fromIterable(newJeansList)
}
val newJeansList= mutableListOf<NewJeans>(
NewJeans(1,"민지",20),
NewJeans(2,"하니",20),
NewJeans(3,"다니엘",19),
NewJeans(4,"해린",18),
NewJeans(5,"혜인",16),
)
data class NewJeans
(
val id: Long,
val name: String,
val age: Int
)