获取特定 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 次发射以及所有 BC 被传递到流上。

也许是这样的?

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);

}