Lambda_02 Lambda实现 有参、无参、多参、有无返回值函数|8月更文挑战

96 阅读2分钟

这是我参与8月更文挑战的第17天,活动详情查看:8月更文挑战

Lambda 无参、有参、有返回值、无返回值

public class Lambda03 {
    public static void main(String[] args) {
        /**
         * 一个String入参
         */
        LambdaInterface31 lambdaInterface31 = (String str) -> System.out.println("welcome:" + str);
        lambdaInterface31.fun("Lambda.");

        /**
         * 两个String入参
         */
        LambdaInterface32 lambdaInterface32 = (String name, int age) -> System.out.println(name + "今年" + age + "岁。");
        lambdaInterface32.fun("小明", 3);

        /**
         * 两个int入参 带返回值
         */
        LambdaInterface33 lambdaInterface33 = (int x, int y) -> {
            int sum = x + y;
            return sum;
        };
        int sum = lambdaInterface33.sum(2, 3);
        System.out.println("2+3="+sum);

        /**
         * 无参数有返回值
         */
        LambdaInterface34 lambdaInterface34 = () ->{
            System.out.println("无参数有返回值");
            return "无参数有返回值";
        };
        lambdaInterface34.fun();
    }
}

interface LambdaInterface31 {
    public void fun(String str);
}

interface LambdaInterface32 {
    public void fun(String name, int age);
}

interface LambdaInterface33 {
    public int sum(int x, int y);
}

interface LambdaInterface34 {
    public String fun();
}

输出结果:

welcome:Lambda.
小明今年3岁。
2+3=5
无参数有返回值

函数一个参数或实现的函数体只有一行代码时函数可以简写

        /**
         * 一个String入参
         */
        LambdaInterface31 lambdaInterface31 = (String str) -> System.out.println("welcome:" + str);
        lambdaInterface31.fun("Lambda.");

        /**
         * 一个String入参
         * 简写 省略String
         */
        LambdaInterface31 lambdaInterface311 = (str) -> System.out.println("welcome:" + str);
        lambdaInterface311.fun("Lambda311.");

        /**
         * 一个String入参
         * 简写 省略String 和 ()
         */
        LambdaInterface31 lambdaInterface312 = str -> System.out.println("welcome:" + str);
        lambdaInterface312.fun("Lambda312.");

输出结果:

welcome:Lambda.
welcome:Lambda311.
welcome:Lambda312.

给定一个厨子cook接口,内含唯一的抽象方法makeFood,且无参数、无返回值。

使用Lambda的标准格式调用invokeCook方法,打印输出“吃饭啦!”字样

public class Demo01Cook {
    public static void main(String[] args) {
        //调用invoke Cook方法,参数是Cook接口,传递Cook接口匿名内部类对象
        invokeCook(new Cook() {
            @Override
            public void makeFood() {
                System.out.println("吃饭啦");
            }
        });
        
        
        //使用Lambda表达式,简化匿名内部类方法
        invokeCook(()->{
            System.out.println("吃饭啦1");
        });
        
    }
    //定义一个方法,参数传递cook接口,方法内部调用Cook接口中的方法makefood
    public static void invokeCook(Cook cook){
        cook.makeFood();
    }
}

interface接口:

public interface Cook {
    public abstract void makeFood();
}

lambda表达式在实际开发中其实很好使用,建议大家多实用lambda表达式,但是就是语法比较抽象,不容易懂。需要多使用才能掌握。