参加特定班级和其他一切事件的第n个事件

时间:2017-10-12 02:24:03

标签: rx-java rx-java2

说我有

public abstract class Event {}

public final class A extends Event {}
public final class B extends Event {}
public final class C extends Event {}

现在,使用Observable<Event>,我如何对其进行过滤,以便仅n - A以及所有BC的排放量传递到溪流上。

这样的事可能吗?

myObservable.publish(shared ->
  Observable.merge(
    shared.ofType(A.class).take(n),
    shared.notOfType(A.class) // this does not exist
  )
)

有解决这个问题的好方法吗?

1 个答案:

答案 0 :(得分:1)

只需使用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);

}