gpt4 book ai didi

java - 取第一项,不完成

转载 作者:行者123 更新时间:2023-12-02 09:28:26 29 4
gpt4 key购买 nike

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

我想获取 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com