java - 取第一项,不完成

标签 java rx-java2

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

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

最佳答案

怎么样.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();

关于java - 取第一项,不完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58170861/

相关文章:

java - m2eclipse是否取消了多模块的支持?

java - HashSet 包含子字符串

java - RXJava - 当其中之一的数据可用时永久切换可观察对象

java - RxJava 2 : emit collected list of items after a certain period of time

android - Observable.concat(observable,observable) 的奇怪结果

使用 RxJava 或 kotlin 协程的 Android ViewState

java - Jvm heapdump 不是由信号生成的

java - java中多线程共享数据

java - 32 位 native 代码,IN A 和 64 位 JVM

android - 改造JavaRx2线程中断