package com.googlecode.totallylazy.transducers; import java.util.concurrent.atomic.AtomicInteger; import static com.googlecode.totallylazy.transducers.State.Continue; public interface DropTransducer<A> extends Transducer<A, A> { int limit(); static <A> Transducer<A, A> dropTransducer(int limit) { if (limit == 0) return Transducers.identity(); AtomicInteger count = new AtomicInteger(); return new DropTransducer<A>() { @Override public int limit() { return limit; } @Override public Receiver<A> apply(Receiver<A> receiver) { return Receiver.receiver(receiver, item -> { int position = count.getAndIncrement(); if (position < limit) { return Continue; } return receiver.next(item); }); } }; } }