External argument for method reference in Java 8

I want to pass an external parameter to a method reference:

String prefix = "The number is :";
numbers.forEach(Main::printWithPrefix);

private static void printWithPrefix(Integer number) {
    System.out.println(number);
}

I do not know how to do that. I can do this with lambda:

String prefix = "The number is :";
numbers.forEach(number -> {
    System.out.println(prefix + number);
});

Is it possible to pass an external parameter to a method reference?

+3
source share
1 answer

No, you cannot pass a parameter to a method reference. You can create a method that returns Consumer:

private static Consumer<Integer> printWithPrefix(String prefix) {
    return number -> System.out.println(prefix + number);
}

Then it works like a factory to create Consumer, which you can pass to numbers.forEach:

String prefix = "The number is :";
numbers.forEach(printWithPrefix(prefix));

You can even make it more general by creating a method printWithPrefixthat takes Consumeras an argument so that you can switch to another if you want:

private static Consumer<Integer> printWithPrefix(String prefix,
                                                 Consumer<Integer> printer) {
    return number -> {
        System.out.print(prefix);
        printer.accept(number);
    };
}

, , printNumber:

private static void printNumber(Integer number) {
    System.out.println(number);
}

String prefix = "The number is :";
numbers.forEach(printWithPrefix(prefix, Main::printNumber));
+7

Source: https://habr.com/ru/post/1680587/


All Articles