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));