[RxJava^Android]项目经验分享 --- 递归实现
介绍一下业务逻辑:获取接口数据,根据接口内容判断是否需要继续获取数据。
本文使用递归思路,通过RxJava来实现此功能,获取数据的Observable直接用模拟的Observable.just()替代。关键点使用concatMap和concatWith操作符
代码块
public Observable<Integer> getInt(int i) {
return Observable.just(i).concatMap(integer -> {
if (integer == 10) { //判断条件
return Observable.just(10); //发射数据
} else {
return Observable
.just(integer)
.concatWith(getInt(integer + 1));
//连接发射
}
});
}
public void testMain() {
getInt(0).subscribe(getSubscriber());
}
private Subscriber<Object> getSubscriber() {
return new Subscriber<Object>() {
@Override
public void onCompleted() {
LogUtils.d("onCompleted");
}
@Override
public void onError(Throwable e) {
LogUtils.d("onError : " + e.toString());
}
@Override
public void onNext(Object o) {
LogUtils.d("onNext : " + o);
}
};
}
输出结果
01-05 10:42:13.257 24959-24975/? D/LogUtils: onNext : 0
01-05 10:42:13.257 24959-24975/? D/LogUtils: onNext : 1
01-05 10:42:13.257 24959-24975/? D/LogUtils: onNext : 2
01-05 10:42:13.257 24959-24975/? D/LogUtils: onNext : 3
01-05 10:42:13.257 24959-24975/? D/LogUtils: onNext : 4
01-05 10:42:13.258 24959-24975/? D/LogUtils: onNext : 5
01-05 10:42:13.258 24959-24975/? D/LogUtils: onNext : 6
01-05 10:42:13.258 24959-24975/? D/LogUtils: onNext : 7
01-05 10:42:13.258 24959-24975/? D/LogUtils: onNext : 8
01-05 10:42:13.258 24959-24975/? D/LogUtils: onNext : 9
01-05 10:42:13.258 24959-24975/? D/LogUtils: onNext : 10
01-05 10:42:13.258 24959-24975/? D/LogUtils: onCompleted
[RxJava^Android]项目经验分享 --- 递归实现的更多相关文章
- [RxJava^Android]项目经验分享 --- 异常方法处理
简单介绍一下背景,最近RxJava很火,我也看来学习一下,计划在项目的独立模块中使用它.使用过程中遇到很多问题,在这里记录分享一下.可能有使用不当的地方,大家多多包涵.对于RxJava的基本概念和功能 ...
- [RxJava^Android]项目经验分享 --- RxLifecycle功能实现分析(一)
最近在研究RxJava自定义操作符的实现原理,发现成型的项目案例较少.突然想起在项目中应用的RxLifecycle是使用自定义操作符,便拿来研究了一下.分析之前,跟大家了解一些相关操作符和RxLi ...
- [RxJava^Android]项目经验分享 --- RxLifecycle功能实现分析(二)
接着上一篇文章的内容,这篇文章一边分析RxLifecycle的实现原理,一边学习RxJava操作符. 首先RxLifecycle在基础类里定义BehaviorSubject并绑定Activity或 ...
- [RxJava^Android]项目经验分享 --- 失败重试
简单介绍一下业务逻辑:获取字符串,如果获取失败进行10次重试,超出10次未成功视为失败. 模拟获取字符串场景 代码块 class MsgTool { int count; String getMsg( ...
- 项目经验分享[转自min.jiang]
最近三个月,我非常荣幸的做为TeamLeader带领几个小组成员做了一个国外项目,这里想为大家分享一些小经验,尽管我佣有六年多的项目经验,但我一直的方向是架构师.大家知道架构师一般情况是偏向技 ...
- Georgia Tech Online Master of Science in Computer Science 项目经验分享
Georgia Tech Online Master of Science in Computer Science 项目经验分享 Posted on 2014/04/22 项目关键词:工科名校,计算机 ...
- IdentityServer4系列之中文文档及实际项目经验分享
0.前言 原文:http://docs.identityserver.io/en/release/声明: 1.目录一至五章节根据IdentityServer英文文档翻译而来,有些内容会根据自己的理解来 ...
- Unity多媒体展示项目经验分享-ImageEffect+动态绑定
Unity多媒体展示项目经验分享-ImageEffect+动态绑定+网络通信 <ignore_js_op> “海尔科技展墙”是去年年初我们为上海家电博览会制作的一个多媒体展项,有限的工期以 ...
- 项目经验分享——Java常用工具类集合 转
http://blog.csdn.net/xyw591238/article/details/51678525 写在前面 本文涉及的工具类部分是自己编写,另一部分是在项目里收集的.工具类涉及数 ...
随机推荐
- 创建dll教程
先看我的总结: 总结: 1.头文件中如果想以C形式提供,要判断,如果定义了 _cplusplus, extern "c"{ 这里写接口声明 } 2.接口声明中,要表明接口接入点的 ...
- php获取用户 地区 、ip地址
header("Content-type: text/html; charset=utf-8"); function getCity($ip = '')//获取地区 { if($i ...
- How to use Bundle&Minifier and bundleconfig.json in ASP.NET Core
引言 我们在ASP.NET MVC 中经常会用到 bundleConfig.cs 文件来进行我们 css 和 js 的绑定, 那么在ASP.NET Core 中我们应该如何使用呢? 步骤一 在 Vis ...
- SPOJ FTOUR2 - Free tour II
Description 有些黑点,问你选择不超过 \(k\) 个黑点的路径,路径权值最大是多少. Sol 点分治. 这是qzc的论文题,不过我感觉他的翻译好强啊...我还是选择了自己去看题目... 点 ...
- 关于python装饰器
关于python装饰器,不是系统的介绍,只是说一下某些问题 1 首先了解变量作用于非常重要 2 其次要了解闭包 def logger(func): def inner(*args, **kwargs) ...
- python界面
import easygui as g import sys while 1: g.msgbox("我一定要学会编程!","加油!") #choices = [ ...
- JS 格式化当前时间
Date.prototype.format = function(fmt) { var o = { "M+" : this.getMonth()+1, //月份 "d+& ...
- 三年回首:C基础
atoi 实现注意: 要可以表示负数:处理到空格要结束:空串""返回0:NULL直接seg fault:溢出判断(atoi(2147483648)实际得到的是-2147483648 ...
- 获取文本的编码类型(from logparse)
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.F ...
- 安装JBOSS
下载JBOSS 无需安装 修改环境变量: JBOSS_HOME=/root/jboss-as-7.1.1.Finalexport JBOSS_HOME 进入bin下 ./standalone.sh - ...