猿问

取第一项,不完成

有没有办法(运算符)来缩小/增强下面的代码?


我想获取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();

    }

}


吃鸡游戏
浏览 62回答 1
1回答

白衣染霜花

怎么样.distinctUntilChanged()Observable.interval(1, TimeUnit.SECONDS, scheduler)     .take(7)     .distinctUntilChanged((a, b) -> true)     .test();除第一项外的所有项目均被比较器阻止。当上游完成时,流也完成。编辑:甚至更短,只需.distinctObservable.interval(1, TimeUnit.SECONDS, scheduler)     .take(7)     .distinct(a -> 0)     .test();
随时随地看视频慕课网APP

相关分类

Java
我要回答