RxJava2 / RxAndroid2的过滤器filter
filter完成一个条件过滤和筛选,从Observable的输出数据中,经过filter筛选一层,如果filter判断的值为真,则交给观察者,否则跳过,例如代码:
package zhangphil.app;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.functions.Predicate;
import io.reactivex.observers.DisposableObserver;
import io.reactivex.schedulers.Schedulers;
public class MainActivity extends AppCompatActivity {
private final String TAG = getClass().getSimpleName();
private CompositeDisposable mCompositeDisposable = new CompositeDisposable();
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
test();
}
private void test() {
DisposableObserver disposableObserver = new DisposableObserver<Integer>() {
@Override
public void onNext(Integer i) {
Log.d(TAG, "#####开始#####");
Log.d(TAG + "数据", String.valueOf(i));
Log.d(TAG, "#####结束#####");
}
@Override
public void onComplete() {
Log.d(TAG, "onComplete");
}
@Override
public void onError(Throwable e) {
Log.e(TAG, e.toString(), e);
}
};
mCompositeDisposable.add(
getObservable().filter(new Predicate<Integer>() {
@Override
public boolean test(Integer integer) throws Exception {
int result = integer % 10;
boolean b = (result == 0);
return b; // 此处返回的条件若为true,则数据交给观察者 ,否则跳过
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(disposableObserver));
}
private Observable<Integer> getObservable() {
return Observable.range(0, 100);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 如果退出程序,就清除后台任务
mCompositeDisposable.clear();
}
}
代码输出:
05-15 17:15:49.664 29872-29872/zhangphil.app D/MainActivity: #####开始#####
05-15 17:15:49.664 29872-29872/zhangphil.app D/MainActivity数据: 0
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####结束#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####开始#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity数据: 10
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####结束#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####开始#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity数据: 20
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####结束#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####开始#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity数据: 30
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####结束#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####开始#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity数据: 40
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####结束#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####开始#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity数据: 50
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####结束#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####开始#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity数据: 60
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####结束#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####开始#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity数据: 70
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####结束#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####开始#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity数据: 80
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####结束#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####开始#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity数据: 90
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: #####结束#####
05-15 17:15:49.665 29872-29872/zhangphil.app D/MainActivity: onComplete

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
互联网企业安全高级指南3.6 需要自己发明安全机制吗
3.6 需要自己发明安全机制吗 1. 安全机制的含义 首先解释一下发明安全机制这句话的意思。安全机制包括:常见的对称和非对称加密算法,操作系统自带的RBAC基于角色的访问控制,自带的防火墙Netfilter,Android的基于appid隔离的机制,kernel支持的DEP(数据段执行保护),以及各种ASLR(地址空间随机映射),各种安全函数、服务器软件的安全选项,这些都属于已经存在的安全机制,注意我用的词是“已经存在”,而这个话题是针对是不是要在已有的安全机制上再去发明新的安全机制,比如三星手机的KNOX,就是在Android基础上自己造了个轮子。 2. 企业安全建设中的需求 企业安全的日常工作是不是也会面临自己去发明安全机制的需求?会,但是不常见。实际上,在日常中发生的绝大多数问题都属于对现有安全机制的理解有误、没有启用或没有正确使用
-
下一篇
Android文件各种存储路径的比较
1、File cacheDir = context.getCacheDir(); 应用内部存储空间(数据文件私有)文件存储到这个路径下,不需要申请权限,当应用被卸载的时候,目录下的文件会被删除。 需要注意的是,这个文件的目录和应用的存储位置有关, 当应用被移动到外部存储设备的时候,文件的绝对路径也是变化的,所以建议当数据存储到这个目录的时候,用相对路径。 这个目录和getFilesDir()目录最大的不同在于:当安卓设备的存储空间少,或者不够用的时候,系统会自动删除这个目录下的文件。 官方建议是,超过1MB的文件,建议存储到getExternalCacheDir()目录下 2、File filesDir = context.getFilesDir(); 应用内部存储空间(数据文件私有)文件存储到这个路径下,不需要申请权限,当应用被卸载的时候,目录下的文件会被删除。 需要注意的是,这个文件的目录和应用的存储位置有关, 当应用被移动到外部存储设备的时候,文件的绝对路径也是变化的,所以建议当数据存储到这个目录的时候,用相对路径 系统提供的访问此路径文件的方法是:context.openFi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- MySQL数据库在高并发下的优化方案