如何解决flatMap 和 flatMap 单个用于分组的 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 -> { .... }
决定了如何处理由源发出的元素的方式。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。