我希望这个小例子打印出所有可被3整除的数字。

@Test
public 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中进行操作。

谢谢你的帮助!

最佳答案

使用方法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

07-24 09:47
查看更多