【问题标题】: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));
    

    【讨论】:

      猜你喜欢
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 2020-04-06
      相关资源
      最近更新 更多