获取特定 class 的第 n 个第一个事件和其他所有事件
Take n-th first events of specific class and everything else
说我有
public abstract class Event {}
public final class A extends Event {}
public final class B extends Event {}
public final class C extends Event {}
现在,有了 Observable<Event>
,我如何过滤它,以便只有 A
的第 n
次发射以及所有 B
和 C
被传递到流上。
也许是这样的?
myObservable.publish(shared ->
Observable.merge(
shared.ofType(A.class).take(n),
shared.notOfType(A.class) // this does not exist
)
)
有什么好办法解决这个问题吗?
只需使用 instanceof 并反转逻辑
@Test
void name() {
Observable<? extends Event> just = Observable.just(
new A(),
new B(),
new A(),
new B(),
new C(),
new A(),
new C()
);
int n = 2;
Observable<? extends Event> publish = just.publish(shared ->
Observable.merge(
shared.ofType(A.class).take(n),
shared.filter(o -> !(o instanceof A))
)
);
publish.test()
.assertValueCount(6);
}
说我有
public abstract class Event {}
public final class A extends Event {}
public final class B extends Event {}
public final class C extends Event {}
现在,有了 Observable<Event>
,我如何过滤它,以便只有 A
的第 n
次发射以及所有 B
和 C
被传递到流上。
也许是这样的?
myObservable.publish(shared ->
Observable.merge(
shared.ofType(A.class).take(n),
shared.notOfType(A.class) // this does not exist
)
)
有什么好办法解决这个问题吗?
只需使用 instanceof 并反转逻辑
@Test
void name() {
Observable<? extends Event> just = Observable.just(
new A(),
new B(),
new A(),
new B(),
new C(),
new A(),
new C()
);
int n = 2;
Observable<? extends Event> publish = just.publish(shared ->
Observable.merge(
shared.ofType(A.class).take(n),
shared.filter(o -> !(o instanceof A))
)
);
publish.test()
.assertValueCount(6);
}