Handlers provides a minimal and adaptable interface for chaining methods.
AtomicBoolean hitStop = new AtomicBoolean(false);
AtomicBoolean hitComplete = new AtomicBoolean(false);
Handlers<StringBuilder> handlers = build(
(f, n) -> a -> {
a.append("1");
n.accept(a);
}, (f, n) -> a -> {
a.append("2");
n.accept(a);
}, (f, n) -> a -> {
a.append("3");
n.accept(a);
});
Consumer<StringBuilder> consumer = handlers.apply(
a -> hitStop.set(true),
a -> hitComplete.set(true));
StringBuilder builder = new StringBuilder();
consumer.accept(builder);
assertEquals("123", builder.toString());
assertEquals(false, hitStop.get());
assertEquals(true, hitComplete.get());public class Station implements BiFunction<BiConsumer<StringBuilder, Throwable>,
Consumer<StringBuilder>, Consumer<StringBuilder>> {
@Override
public Consumer<StringBuilder> apply(BiConsumer<StringBuilder, Throwable> stop,
Consumer<StringBuilder> next) {
return next;
}
}