package com.googlecode.totallylazy.transducers; import com.googlecode.totallylazy.functions.Function1; import static com.googlecode.totallylazy.transducers.State.Stop; public interface MapTransducer<A, B> extends Transducer<A, B> { Function1<? super A, ? extends B> mapper(); static <A, B> MapTransducer<A, B> mapTransducer(Function1<? super A, ? extends B> mapper) { return () -> mapper; } @Override default Receiver<A> apply(Receiver<B> receiver) { return Receiver.receiver(receiver, item -> { try { return receiver.next(mapper().call(item)); } catch (Exception e) { receiver.error(e); return Stop; } }); } }