Вы можете повторно использовать интерфейсы, предоставляемые Java, или, если их недостаточно, следовать соглашению об именах в пакете java.util.function :
Аналогично VoidFunction
:
Consumer<T>
Представляет операцию, которая принимает один входной аргумент и не возвращает результата.
BiConsumer<T,U>
Представляет операцию, которая принимает два входных аргумента и не возвращает результата.
Аналогично ReturningFunction
:
Function<T,R>
Представляет функцию, которая принимает один аргумент и выдает результат.
BiFunction<T,U,R>
Представляет функцию, которая принимает два аргумента и выдает результат.
Supplier<T>
Представляет поставщика результатов.
Для "output to stdout" вам, вероятно, вообще не нужен интерфейс. Вместо этого вам нужен конкретный класс, подобный следующему:
final class SystemOutConsumer<A> implements Consumer<A> {
private final BiConsumer<PrintStream, A> printStreamABiConsumer;
public SystemOutConsumer(
final BiConsumer<PrintStream, A> printStreamABiConsumer) {
this.printStreamABiConsumer = printStreamABiConsumer;
}
public void accept(final A a) {
printStreamABiConsumer.accept(System.out, a);
}
}