Java8 - использовать функциональный интерфейс для замены потребителя или поставщика
Так как этот Consumer/Supplier/Predicate/UnaryOperator является только особым случаем функции, как я могу заменить эти interfacces на Function?
T → Функция → R
T → Потребитель → null
null → Поставщик → T
T → Predicate → boolean
T → UnaryOperator → T
null и boolean - это просто частный случай для T. Поэтому я пишу два случая, используя Function для замены Predicate и UnaryOperator.
Например:
private static void replacePredicate() {
Function<String, Boolean> func = x -> x.startsWith("a");
Predicate<String> pre = x -> x.startsWith("a");
System.out.println(func.apply("ape"));
System.out.println(pre.test("ape"));
}
private static void replaceUnaryOperator() {
Function<Integer, Integer> func = x -> x * 2;
UnaryOperator<Integer> uo = x -> x * 2;
System.out.println(func.apply(6));
System.out.println(uo.apply(6));
}
Но как я могу использовать функцию для замены Потребителя или Поставщика? Например, я хочу заменить Consumer, но код типа Function<String, null> func = x -> System.out.println(x);
является незаконным.
Любое предложение будет принята с благодарностью ~
Ответы
Ответ 1
A Consumer<T>
можно рассматривать как Function<T, Void>
. A Supplier<T>
можно рассматривать как Function<Void, T>
. Вам нужно будет вернуть null от вашего потребителя, записанного как функцию, и принять (и игнорировать) Void в качестве аргумента от вашего поставщика, написанного как функцию.
Не уверен, что я понял это.