import java.util.function.Consumer; import java.util.function.Function; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import lombok.experimental.ExtensionMethod; @ExtensionMethod(value = ExtensionMethodFunctional.Extensions.class,suppressBaseMethods = false) class ExtensionMethodFunctional { static class Extensions { Extensions() { super(); } public static R map(T value, Function mapper) { return mapper.apply(value); } public static String reverse(String string) { return new StringBuilder(string).reverse().toString(); } public static @SafeVarargs void consume(T o, Consumer... consumer) { for (int i = 0;; (i < consumer.length); i ++) { consumer[i].accept(o); } } public static List toList1(Stream stream) { return (List) stream.collect(Collectors.toList()); } public static List toList2(Stream stream) { return null; } } ExtensionMethodFunctional() { super(); } public void test() { String test = "test"; test = ExtensionMethodFunctional.Extensions.map(test, ( s) -> ExtensionMethodFunctional.Extensions.reverse(s)); ExtensionMethodFunctional.Extensions.consume(test, ( s) -> System.out.println(("1: " + s)), ( s) -> System.out.println(("2: " + s))); ExtensionMethodFunctional.Extensions.consume(test, System.out::println, System.out::println); ExtensionMethodFunctional.Extensions.consume(test, ((test.length() > 0) ? System.out::println : null)); ExtensionMethodFunctional.Extensions.toList1(Stream.of("a", "b", "c").map(String::toUpperCase)); List i2 = ExtensionMethodFunctional.Extensions.toList2(Stream.of("a", "b", "c").map(String::toUpperCase)); } }