技术标签: rxjava
先订阅Completable,
再订阅 ObservableSource 、 Publisher 、 SingleSource 、 MaybeSource 、 CompletableSource ,
并返回新的Observable、Flowable、Single、Maybe、Completable
来自此Completable的【错误事件】将传播到下游订阅者,
并且将导致跳过 ObservableSource 、 Publisher 、 SingleSource 、 MaybeSource 、 CompletableSource 的订阅。
/**
* 返回一个Observable,它将订阅此Completable,一旦完成,则将订阅{@code next}ObservableSource。
* 来自此Completable的错误事件将传播到下游订阅者,并且将导致跳过 Observable的订阅。
*/
public final <T> Observable<T> andThen(ObservableSource<T> next) {
ObjectHelper.requireNonNull(next, "next is null");
return RxJavaPlugins.onAssembly(new CompletableAndThenObservable<T>(this, next));
}
/**
* 返回一个Flowable,它将订阅此Completable,一旦完成,则将订阅{@code next} Flowable。
* 来自此Completable的错误事件将传播到下游订阅者,并且将导致跳过 Publisher的订阅。
*/
public final <T> Flowable<T> andThen(Publisher<T> next) {
ObjectHelper.requireNonNull(next, "next is null");
return RxJavaPlugins.onAssembly(new CompletableAndThenPublisher<T>(this, next));
}
/**
* 返回一个将订阅此Completable的Single,一旦完成,则将订阅{@code next} SingleSource。
* 来自此Completable的错误事件将传播到下游订阅者,并且将导致跳过 Single的订阅。
*/
public final <T> Single<T> andThen(SingleSource<T> next) {
ObjectHelper.requireNonNull(next, "next is null");
return RxJavaPlugins.onAssembly(new SingleDelayWithCompletable<T>(next, this));
}
/**
* 返回{@link Maybe},它将订阅此Completable,一旦完成,则将订阅{@code next} MaybeSource。
* 来自此Completable的错误事件将传播到下游订阅者,并导致跳过 Maybe的订阅。
*/
public final <T> Maybe<T> andThen(MaybeSource<T> next) {
ObjectHelper.requireNonNull(next, "next is null");
return RxJavaPlugins.onAssembly(new MaybeDelayWithCompletable<T>(next, this));
}
/**
* 返回一个Completable,它首先运行此Completable,然后再运行另一个Completable。
* 这是{@link #concatWith(CompletableSource)}的别名。
*/
public final Completable andThen(CompletableSource next) {
ObjectHelper.requireNonNull(next, "next is null");
return RxJavaPlugins.onAssembly(new CompletableAndThenCompletable(this, next));
}
/**
* 将此Completable与另一个Completable串联。
* 返回:新的Completable,该Completable订阅了此内容,然后订阅了另一个Completable
* @see #andThen(MaybeSource)
* @see #andThen(ObservableSource)
* @see #andThen(SingleSource)
* @see #andThen(Publisher)
*/
@CheckReturnValue
@NonNull
@SchedulerSupport(SchedulerSupport.NONE)
public final Completable concatWith(CompletableSource other) {
ObjectHelper.requireNonNull(other, "other is null");
return RxJavaPlugins.onAssembly(new CompletableAndThenCompletable(this, other));
}
private Completable getCompletableComplete() {
return Completable.create(new CompletableOnSubscribe() {
@Override
public void subscribe(CompletableEmitter emitter) throws Exception {
emitter.onComplete();//
}
});
}
private Completable getCompletableError() {
return Completable.create(new CompletableOnSubscribe() {
@Override
public void subscribe(CompletableEmitter emitter) throws Exception {
emitter.onError(new Error());//
}
});
}
@Test
public void andThen1() {
getCompletableComplete().andThen(Observable.range(0, 5))
.subscribe(getObserver());
}
//========onSubscribe=========
//========onNext=========0
//========onNext=========1
//========onNext=========2
//========onNext=========3
//========onNext=========4
//=========onComplete========
//返回一个Observable,它将订阅此Completable,
//一旦完成,则将订阅{@code next} ObservableSource。
// 来自此Completable的错误事件将传播到下游订阅者,并且将导致跳过 Observable的订阅。
@Test
public void andThen2() {
getCompletableError().andThen(Observable.range(0, 5))
.subscribe(getObserver());
}
//========onSubscribe=========
//========onError=========null
private Observer<Integer> getObserver() {
return new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
System.out.println("========onSubscribe=========");
}
@Override
public void onNext(Integer integer) {
System.out.println("========onNext=========" + integer);
}
@Override
public void onError(Throwable e) {
System.out.println("========onError=========" + e.getMessage());
}
@Override
public void onComplete() {
System.out.println("=========onComplete========");
}
};
}
总结一下,实现的几个方法。1.必须要在辅助的3D软件进行UV展开,比如说3Dmax maya。只要在模型上显示图案都和UV有关联。(参考资料3)2.使用代码对每个立方体,的6个面的材质进行替换。3.用6个小方块替换1个大方块。4.使用shader的双材质5.六个面分别来一个plan之后赋予材质---------------------------
需要render 一下,重新渲染$("#add").click(function() { $("#famliy-table").append(tr); form.render('select') deleteTr() })https://www.layui.com/doc/modules/form.html..._layui formselects 没有添加
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma..._markdown表示nan
Lua是一门面向过程的语言,并没有面向对象语言中的"类"的概念,但是我们可以通过Lua中的”Metatable(元表)“来模拟一个”类“,关键在于__index这个域,他提供了表的索引入口。 元表也是一个表,Lua语言中定义了很多重定义 table类型操作的入口,他们都是以双下划线”__“开头的,例如__index,__add,当你为一个值设定了Metatable,并且重写了其操作入
参考的文章:https://blog.csdn.net/qq_39097425/article/details/85245668测速原理:使用干簧管或霍尔传感器,两个性质相同,有磁铁接近时进行触发,产生高低电平信号。将传感器绑定在车架上,车轮上放上磁铁。当磁铁触发一次后,即视为车轮转动一圈,使用小学数学知识求得车轮周长,即可求出时速。干簧管:霍尔传感器:除了干簧管和霍尔传感器这一类的接近开关之外,可以使用震动开关。将设备固定在脚踏板内侧,使用踏频来计算速度(此方法只适合动感单车),还可以骑行者的踏频_arduino测实时车速度
最近在项目中经常遇到将list转为dict形式,之前都只会用for循环,取出list中的每个值,update到dict中。示例1scrabble_scores = [(1, "E A O I N R T L S U"), (2, "D G"), (3, "B C M P"), (4, "F H V W Y"), (5, "K"), (8, "J X"), (10, "Q Z")]如何将上面的lis..._python list 转字典
完全没有思路,还以为要维护多项式积分然后容斥啥的。看了wxh010910的题解,果然还是自己太菜了,___txdy。我们不妨先固定一个最长的段的起点作为原点,这样不会循环覆盖了。起点在实数范围内随机非常奇怪,但是我们只关心它们是否覆盖了整个环,于是对于每个圆弧的起点的小数部分,我们并不关心它具体是多少,而只关心它们之间的相对大小关系。所以我们可以O((n−1)!)\mathcal O((n-1..._atcoder 多项式 积分
Windows环境下npm install安装包依赖时,常出现一些错误,下面为个人解决办法:错误一缺少python环境:G:\nodejs\moviesite\node_modules\bcrypt>if not defined npm_config_node_gyp (node "D:\Program Files\nodejs\node_modules\npm\bin\...
对于Windows10的输入法切换功能,很多用惯windows7的朋友在刚开始接触的时候并不熟悉,在很多时候切换输入法的时候因为一直的习惯而无法畅快切换输入方式。虽然对于很多新用户来说,目前切换输入法的方式更加方便,但对于用惯了老系统的用户或者是经常玩FPS游戏的用户来说,还是希望切换回原来的使用方式,那么应该怎么做才能让新系统的输入法切换回到我们熟悉的切换模式呢,下面就跟随小编学习一下吧。首先单..._hkey_current_user\keyboard layout
正在做微信开发,通过网页授权
最大联通环 POJ 3895 Cycles of Lanes (dfs+邻接表)_poj dfs 有环
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl