Java 8 中方法引用的外部参数
External argument to method reference in Java 8
我希望将外部参数传递给方法引用:
String prefix = "The number is :";
numbers.forEach(Main::printWithPrefix);
private static void printWithPrefix(Integer number) {
System.out.println(number);
}
我不知道该怎么做。我可以用 lambda 来完成:
String prefix = "The number is :";
numbers.forEach(number -> {
System.out.println(prefix + number);
});
是否可以将外部参数传递给方法引用?
不,您不能将参数传递给方法引用。你可以做的是创建一个 returns a Consumer
:
的方法
private static Consumer<Integer> printWithPrefix(String prefix) {
return number -> System.out.println(prefix + number);
}
这然后作为一个工厂来创建一个 Consumer
,你可以传递给 numbers.forEach
:
String prefix = "The number is :";
numbers.forEach(printWithPrefix(prefix));
您甚至可以使其更通用一些,创建一个 printWithPrefix
方法,该方法将 Consumer
作为参数,这样您就可以在需要时传入另一个参数:
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));
我希望将外部参数传递给方法引用:
String prefix = "The number is :";
numbers.forEach(Main::printWithPrefix);
private static void printWithPrefix(Integer number) {
System.out.println(number);
}
我不知道该怎么做。我可以用 lambda 来完成:
String prefix = "The number is :";
numbers.forEach(number -> {
System.out.println(prefix + number);
});
是否可以将外部参数传递给方法引用?
不,您不能将参数传递给方法引用。你可以做的是创建一个 returns a Consumer
:
private static Consumer<Integer> printWithPrefix(String prefix) {
return number -> System.out.println(prefix + number);
}
这然后作为一个工厂来创建一个 Consumer
,你可以传递给 numbers.forEach
:
String prefix = "The number is :";
numbers.forEach(printWithPrefix(prefix));
您甚至可以使其更通用一些,创建一个 printWithPrefix
方法,该方法将 Consumer
作为参数,这样您就可以在需要时传入另一个参数:
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));