微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

flatMap 和 flatMap 单个用于分组的 observables

如何解决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 举报,一经查实,本站将立刻删除。