【问题标题】:External argument to method reference in Java 8Java 8 中方法引用的外部参数
【发布时间】:2016-08-01 11:40:47
【问题描述】:
我希望将外部参数传递给方法引用:
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);
});
是否可以将外部参数传递给方法引用?
【问题讨论】:
标签:
java
lambda
java-8
method-reference
【解决方案1】:
不,您不能将参数传递给方法引用。你可以做的是创建一个返回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));