package com.googlecode.totallylazy.transducers; import com.googlecode.totallylazy.Option; import java.util.NoSuchElementException; import java.util.concurrent.atomic.AtomicReference; import static com.googlecode.totallylazy.transducers.State.Continue; public interface LastOptionTransducer<T> extends Transducer<T, Option<T>> { static <T> LastOptionTransducer<T> lastOptionTransducer() { AtomicReference<T> reference = new AtomicReference<>(); return receiver -> Receiver.receiver(receiver, item -> { reference.set(item); return Continue; }, () -> { receiver.next(Option.option(reference.get())); receiver.finish(); }); } }