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

合并一个可观察对象列表,然后等待所有完成

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

合并一个可观察对象列表,然后等待所有完成

听起来您正在寻找Zip运算符。

有几种不同的用法,让我们来看一个例子。假设我们有一些不同类型的简单可观察物:

Observable<Integer> obs1 = Observable.just(1);Observable<String> obs2 = Observable.just("Blah");Observable<Boolean> obs3 = Observable.just(true);

等待他们全部的最简单方法是这样的:

Observable.zip(obs1, obs2, obs3, (Integer i, String s, Boolean b) -> i + " " + s + " " + b).subscribe(str -> System.out.println(str));

请注意,在zip函数中,参数具有与要压缩的可观察对象类型相对应的具体类型。

也可以直接压缩可观察对象的列表:

List<Observable<?>> obsList = Arrays.asList(obs1, obs2, obs3);Observable.zip(obsList, (i) -> i[0] + " " + i[1] + " " + i[2]).subscribe(str -> System.out.println(str));

…或通过将列表包装到中

Observable<Observable<?>>

Observable<Observable<?>> obsObs = Observable.from(obsList);Observable.zip(obsObs, (i) -> i[0] + " " + i[1] + " " + i[2]).subscribe(str -> System.out.println(str));

但是,在这两种情况下,zip函数只能接受一个

Object[]
参数,因为列表中的可观察对象的类型及其数量是未知的。这意味着zip函数必须检查参数的数量并进行相应的转换。

无论如何,以上所有示例最终都会打印出来

1 Blah true

编辑:
使用Zip时,请确保

Observables
所有被压缩的拉链发出相同数量的项目。在以上示例中,所有三个可观察对象都发出了一个项目。如果我们要将它们更改为以下内容:

Observable<Integer> obs1 = Observable.from(new Integer[]{1,2,3}); //Emits three itemsObservable<String> obs2 = Observable.from(new String[]{"Blah","Hello"}); //Emits two itemsObservable<Boolean> obs3 = Observable.from(new Boolean[]{true,true}); //Emits two items

然后

1, Blah, True
2, Hello,True
是传递到zip函数中的唯一项目。
3
由于其他可观察物均已完成,因此该项目永远不会被压缩。



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

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

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