Rx.NET中与flatMapIterable等效的操作符是什么?
如何处理Observable<List>并操作单个元素?
今天终于搞定了一个看似简单但容易卡壳的Rx问题,特意来分享给遇到同样困扰的朋友!
假设你手上有一个返回条目列表的Observable,比如Observable<List<String>>——这种情况在Web API的响应里特别常见,但很多时候我们需要对列表里的单个String元素单独做操作,而不是对着整个列表处理。这时候flatMapIterable就是你的救星!
这个实用的操作符的作用很直接:它会把可迭代对象的流,通过映射函数展平成由这些可迭代对象里的单个条目组成的流。换句话说,原来的Observable发射的是一整个ListflatMapIterable处理后,就会变成逐个发射List里的每一个String元素,这样你就能轻松对每个元素执行map、filter之类的操作了。
举个简单的代码例子直观感受下:
// 模拟一个返回字符串列表的Observable Observable<List<String>> listObservable = Observable.just(Arrays.asList("apple", "banana", "cherry")); // 使用flatMapIterable拆分列表,操作单个元素 listObservable .flatMapIterable(list -> list) // 把列表拆成单个元素的流 .map(fruit -> fruit.toUpperCase()) // 对每个元素做转大写处理 .subscribe(fruit -> System.out.println("处理后的水果:" + fruit));
运行这段代码后,你会看到控制台逐个输出:
处理后的水果:APPLE
处理后的水果:BANANA
处理后的水果:CHERRY
是不是一下子就清晰了?再也不用对着整个列表头疼怎么拆元素啦!
内容的提问来源于stack exchange,提问作者Chip
相关产品推荐
相关产品推荐

