poi*_*rez 3 java lambda java-8 method-reference
我期待将外部参数传递给方法引用:
String prefix = "The number is :";
numbers.forEach(Main::printWithPrefix);
private static void printWithPrefix(Integer number) {
System.out.println(number);
}
Run Code Online (Sandbox Code Playgroud)
我不知道怎么做.我能用lambda做到这一点:
String prefix = "The number is :";
numbers.forEach(number -> {
System.out.println(prefix + number);
});
Run Code Online (Sandbox Code Playgroud)
是否可以将外部参数传递给方法引用?
不,您不能将参数传递给方法引用.你可以做的是创建一个返回Consumer:
private static Consumer<Integer> printWithPrefix(String prefix) {
return number -> System.out.println(prefix + number);
}
Run Code Online (Sandbox Code Playgroud)
然后,这可以作为创建Consumer可以传递给的工厂numbers.forEach:
String prefix = "The number is :";
numbers.forEach(printWithPrefix(prefix));
Run Code Online (Sandbox Code Playgroud)
您甚至可以使它更通用,创建一个printWithPrefix方法,将一个Consumer参数作为参数,以便您可以传入另一个,如果您想:
private static Consumer<Integer> printWithPrefix(String prefix,
Consumer<Integer> printer) {
return number -> {
System.out.print(prefix);
printer.accept(number);
};
}
Run Code Online (Sandbox Code Playgroud)
例如,您可以使用它来使用它printNumber:
private static void printNumber(Integer number) {
System.out.println(number);
}
String prefix = "The number is :";
numbers.forEach(printWithPrefix(prefix, Main::printNumber));
Run Code Online (Sandbox Code Playgroud)