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