lambda表达式与静态方法

Nov*_*Guy 8 java lambda static-methods functional-programming java-8

我有一个关于lambda表达式的可重用性而没有代码重复的问题.例如,如果我有一个辅助方法,我可以很容易地将它编码为静态方法,并且可以从其他类中引用它而不需要代码重复.这怎么会在lambda表达式中起作用?示例:我编写了以下静态方法

public class MyUtil {

    public static int doubleMe(int x) {
        return x * 2;
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以在整个项目的多个位置重复使用相同的方法而无需代码重复

public class A {

    public void someOtherCalculation() {
        MyUtil.doubleMe(5);
    }
}

public class B {

    public void myCalculation() {
        MyUtil.doubleMe(3);
    }
}
Run Code Online (Sandbox Code Playgroud)

当涉及到lambda函数时,它如何工作,编写一次函数并在多个类中使用相同的函数.

Function<Integer, Integer> doubleFunction = x -> x * 2;
Run Code Online (Sandbox Code Playgroud)

在我的例子中,我将在哪里编写上面的lambda函数,以及如何在A类和B类中重用它?

das*_*ght 8

我在哪里写上面的lambda函数

由于您的函数不引用任何字段,因此将其放在静态最终字段中是合适的:

class Utility {
    public static final Function<Integer,Integer> doubleFunction = x -> x * 2;
}
Run Code Online (Sandbox Code Playgroud)

如何在A类和B类中重复使用它?

您可以将其称为Utility.doubleFunction,并在需要它的上下文中传递它:

callMethodWithLambda(Utility.doubleFunction);
Run Code Online (Sandbox Code Playgroud)

请注意,方法引用允许您定义一个函数,并将其用作lambda:

class Utility {
    public static Integer doubleFunction(Integer x) {
        return x*2;
    }
}
...
callMethodWithLambda(Utility::doubleFunction);
Run Code Online (Sandbox Code Playgroud)

这种方法非常灵活,因为它允许您在多个上下文中重用相同的代码.