栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在可观察的流中处理前n个项目并以不同的方式处理其余项

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在可观察的流中处理前n个项目并以不同的方式处理其余项

你可以分享你M的流,然后合并到一起

take()
skip()
流,是这样的:

    int m = 10;    int n = 8;    Observable<Integer> numbersStream = Observable.just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) .publish();    Observable<Integer> firstNItemsStream = numbersStream.take(n) .map(i -> i * 2);    Observable<Integer> remainingItemsStream = numbersStream.skip(n) .map(i -> i * 3);    Observable.merge(firstNItemsStream, remainingItemsStream) .subscribe(integer -> System.out.println("result = " + integer));    numbersStream.connect();

编辑:
@AE
Daphne指出,

share()
它将与第一个订阅者一起开始发射,因此,如果Observable已开始发射项目,则第二个订阅者可能会错过通知,因此在这种情况下,还有其他可能性:
cache()
-将答复所有缓存发出的项目并将其回复给每个新订户,但会牺牲取消订阅的能力,因此需要谨慎使用。
reply().refCount()

-将创建
Observable
的是
reply()
以前所有项目的每个新用户(类似缓存),但会取消时,从它的最后一个订户退订。


在这两种情况下,都应考虑内存,因为

Observable
它将在内存中缓存所有发出的项目。

publish()
-在不缓存所有先前项目的情况下,另一种可能性是使用
publish()
create
ConnectableObservable
,并
connect()
在所有必需的订阅者都订阅之后调用它的方法来开始发射,这样将获得同步,并且所有订阅者将正确获得所有通知。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/570652.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号