有没有办法(运算符)来缩小/增强下面的代码?
我想获取 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();
}
}
最佳答案
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/