rx-java - flatMap 和 flatMap single 用于分组的 observables
问题描述
我是 RxJava 的新手,并试图理解它。我有以下来源:
Observable<Employee> obs = Observable.just(
new Employee(101, "Jim", 68_000, 4.2),
new Employee(123, "Bill", 194_000, 6.7));
obs.groupBy(e -> e.getRating())
.flatMapSingle(e -> e.toMultimap(key -> e.getKey(), emp -> emp.getName()))
.subscribe(System.out::println);
这种方法打印键和相关的值。
如果我做:
obs.groupBy(e -> e.getRating())
.flatMapSingle(e -> e.toList())
.subscribe(System.out::println);
它似乎打印了与键关联的值列表。
但是具体是如何flatMapSingle
工作的呢?有什么区别flatMap
?
解决方案
从文档中:
Maps each element of the upstream {@code Flowable} into {@link SingleSource}s, subscribes to all of them
* and merges their {@code onSuccess} values, in no particular order, into a single {@code Flowable} sequence.
在这两种情况下,它的工作方式相同。当你调用
flatMapSingle(e -> { // convert to some value})
您将“e”转换为 lambda 返回的值。在你的情况下,“e”是GroupedFlowable
.
在第一种情况下,您将所有元素转换为包含条目(键,值)的映射,在第二种情况下,您将其转换为列表。
flatMapSingle()
在这两种情况下,方法的工作方式相同。
您有不同的结果,因为您使用不同的实现Function
作为flatMapSingle
参数。
Function
在您的情况下看起来像的参数e -> { .... }
决定了如何处理源发出的元素的方式。
推荐阅读
- javascript - 在字符类中如何解释单词字符?
- makefile - 当我检查 leptonica 时,我收到了 FAIL 消息
- java - this.object.method(this) 有什么作用?
- reactjs - 在 ComponentWillUnmount 的 React 组件中停止网络摄像头
- python - 如何修复我的井字游戏的极小极大算法
- ios - 为什么我的 Heroku 打开应用程序按钮不起作用?
- reactjs - 反应材料表onrowadd失败
- reactjs - 在 React 中父级触发的 onClick 事件上将子级数据传递给父级
- python - 在Python中使用不同的方法按升序排列数字
- html - 为什么我的 jscolor 颜色选择器无法正常工作?