为了账号安全,请及时绑定邮箱和手机立即绑定

RxJava - groupBy、toMap 和 flatMap 不能很好地协同工作?

RxJava - groupBy、toMap 和 flatMap 不能很好地协同工作?

绝地无双 2021-05-30 21:13:39
我希望这个小例子能打印出所有可以被 3 整除的数字。@Testpublic void test() {    Observable.range(1, 100)            .groupBy(n -> n % 3)            .toMap(g -> g.getKey())            .flatMap(m ->  m.get(0))            .subscribe(System.out::println);}在println不打印任何东西,而是和我不知道为什么。我从一个更复杂的例子中简化了这个例子,我知道这可以用不同的方式完成,但我需要这种方式,因为有更多的组需要同时操作flatMap。
查看完整描述

3 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

使用该方法filter(Predicate<? super T> predicate)而不是groupBy(..)发出满足指定谓词的元素。


Observable.range(1, 100)

    .filter(n -> n % 3 == 0)

    .toMap(g -> g.getKey())

    .flatMap(m ->  m.get(0))

    .subscribe(System.out::println);

Java Stream-API 的工作原理相同:


IntStream.range(1, 100).filter(n -> n%3 == 0).forEach(System.out::println);

// prints 3, 6, 9, 12... on the each line


查看完整回答
反对 回复 2021-06-02
?
隔江千里

TA贡献1906条经验 获得超10个赞

该GROUPBY操作映射的输入源项目HashMap,其中最新的价值是关键下储存。


引用文档:


If more than one source item maps to the same key, the HashMap will contain the latest of those items.


因此,在您的情况下,toMap运算符将输入序列转换为以下内容HashMap: 

{0=99, 1=100, 2=98}


要从指定的范围中过滤掉所有不能被 3filter整除的数字,只需按照@Nikolas 的建议使用运算符即可。


查看完整回答
反对 回复 2021-06-02
  • 3 回答
  • 0 关注
  • 240 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号