package com.github.davidmoten.rx.internal.operators; import rx.Observable.Operator; import rx.Subscriber; import rx.functions.Action1; public final class OperatorDoOnNth<T> implements Operator<T, T> { public static <T> OperatorDoOnNth<T> create(Action1<? super T> action, int n) { return new OperatorDoOnNth<T>(action, n); } private final Action1<? super T> action; private final int n; private OperatorDoOnNth(Action1<? super T> action, int n) { this.action = action; this.n = n; } @Override public Subscriber<? super T> call(final Subscriber<? super T> child) { return new Subscriber<T>(child) { int count; @Override public void onCompleted() { child.onCompleted(); } @Override public void onError(Throwable e) { child.onError(e); } @Override public void onNext(T t) { count++; if (count == n) { action.call(t); } child.onNext(t); } }; } }