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

取第一项,不完成

取第一项,不完成

吃鸡游戏 2023-09-13 16:51:11
有没有办法(运算符)来缩小/增强下面的代码?我想获取Observable 的第一个元素,但延迟其完成,直到源完成(这就是我使用 进行连接的原因ignoreElements)。public class SOTest {    private final TestScheduler scheduler = new TestScheduler();    @Test    public void take_first_and_do_not_complete() {        TestObserver<Long> test = Observable.interval(1, TimeUnit.SECONDS, scheduler)                .take(7)                .publish(o -> o                        .firstElement()                        .toObservable()                        .concatWith(o                                .doOnNext(e -> System.out.println("to be ignored: " + e))                                .ignoreElements()                        )                )                .doOnNext(e -> System.out.println("First is: " + e))                .test();        scheduler.advanceTimeTo(1, TimeUnit.SECONDS);        test.assertValueCount(1);        test.assertNotComplete();        scheduler.advanceTimeTo(5, TimeUnit.SECONDS);        test.assertValueCount(1);        test.assertNotComplete();        scheduler.advanceTimeTo(7, TimeUnit.SECONDS);        test.assertValueCount(1);        test.assertComplete();    }}
查看完整描述

1 回答

?
白衣染霜花

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

怎么样.distinctUntilChanged()

Observable.interval(1, TimeUnit.SECONDS, scheduler)
    .take(7)
    .distinctUntilChanged((a, b) -> true)
    .test();

除第一项外的所有项目均被比较器阻止。当上游完成时,流也完成。


编辑:

甚至更短,只需.distinct

Observable.interval(1, TimeUnit.SECONDS, scheduler)
    .take(7)
    .distinct(a -> 0)
    .test();


查看完整回答
反对 回复 2023-09-13
  • 1 回答
  • 0 关注
  • 40 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信