Java 8中方法引用的外部参数

时间:2016-08-01 11:40:48

标签: 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);
}

我不知道该怎么做。我能用lambda做到这一点:

String prefix = "The number is :";
numbers.forEach(number -> {
    System.out.println(prefix + number);
});

是否可以将外部参数传递给方法参考?

1 个答案:

答案 0 :(得分:7)

不,您无法将参数传递给方法参考。你可以做的是创建一个返回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));