·Lambda的基本使用介绍
  5Zwip9Gh74n5 2023年11月02日 31 0


文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。个人B站主页热爱技术的小郑

·Lambda的基本使用介绍_静态方法

热爱技术的小郑

前言

lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中。使用lambda表达式可以让代码更加简洁。

Lambda表达式的使用场景:用以简化接口实现

1 、简单使用

接口方法的实现

/**
 * @author zyz
 * @version 1.0
 * @data 2023/8/25 11:36
 * @Description: 关于接口实现,可以有很多种方式来实现。
 *               例如:设计接口的实现类、使用匿名内部类。 但是lambda表达式,比这两种方式都简单。
 */
public class LambdaTest {
    public static void main(String[] args) {
        /**
         *  使用lambda表达式实现接口
         */
        TestDemo testDemo = () ->{
            System.out.println("test");
        };
        testDemo.test();

    }

}

@FunctionalInterface
interface TestDemo{
    /**
     * 测试方法
     */
    public void test();

}

2、Lambda的基本语法

/**
 * @author zyz
 * @version 1.0
 * @data 2023/8/25 11:45
 * @Description: 基本语法
 */
public class LambdaTest2 {
    public static void main(String[] args) {
        /**
         *  使用lambda表达式实现接口:
         *      1、无参方法
         *      2、有参 无返回值
         *      3、有参 有返回值
         */

        /**
         * 1、无参方法
         */
        Test01 t1 = () ->{
            System.out.println("我是无参方法");
        };
        t1.test01();

        /**
         * 2、有参 无返回值
         */
        Test02 t2 = (String name,int age) ->{
            System.out.println("我是有参方法:姓名:" + name + ",年龄: " + age);
        };
        t2.test02("张三",18);

        /**
         * 3、有参 有返回值
         */
        Test03 t3 = (name,age) ->{
            int ageAfter = age + 4;
            System.out.println("我是有参 有返回值方法:姓名:" + name + ",年龄: " + age);
            return ageAfter;
        };
        int ageGet = t3.test03("李四",18);
        System.out.println("四年后年龄:" + ageGet);


        /**
         * 精简写法:
         *        1、省略传入参数的类型
         *        2、方法参数列表只有一个,可以省略圆括号
         *        3、当一个方法体中的逻辑,有且只有一句的情况,大括号可以省略
         *        4、如果⼀个方法中唯⼀的⼀条语句是⼀个返回语句, 此时在省略掉大括号的同时, 也必须省略掉return。
         */

        /**
         * 1、省略传入参数的类型
         */
        Test02 t21 = (name,age) ->{
            System.out.println("我是有参方法:姓名:" + name + ",年龄: " + age);
        };
        t21.test02("张三",18);

        /**
         * 2、方法参数列表只有一个,可以省略圆括号
         */
        Test04 t4 = age ->{
            System.out.println("年龄是:" + age);
            return age + 1;
        };
        t4.test04(18);

        /**
         * 3、方法体只有一句的情况,大括号可以省略
         */
        Test02 t22 = (String name,int age) -> System.out.println("我是有参方法:姓名:" + name + ",年龄: " + age);
        t22.test02("张三",18);

        /**
         * 4、如果⼀个方法中唯⼀的⼀条语句是⼀个返回语句, 此时在省略掉大括号的同时, 也必须省略掉return。
         */
        Test04 t41 = age -> age + 1;
        int ageGet1 = t41.test04(18);
        System.out.println("精简写法,年龄加1:" + ageGet1);


    }
}

/**
 * 无参
 */
@FunctionalInterface
interface Test01{
    public void test01();
}

/**
 * 有参 无返回值
 */
@FunctionalInterface
interface Test02{
    public void test02(String name,int age);
}

/**
 * 有参 有返回值
 */
@FunctionalInterface
interface Test03{
    public int test03(String name,int age);
}

/**
 * 只有一个参数
 */
@FunctionalInterface
interface Test04{
    public int test04(int age);

}

3、函数引用

3.1 静态方法/动态方法

/**
 * @author zyz
 * @version 1.0
 * @data 2023/8/25 14:04
 * @Description: 函数引用:
 *                     引用⼀个已经存在的方法,使其替代lambda表达式完成接口的实现
 */
public class LambdaTest3 {
    public static void main(String[] args) {
        /**
         * 1、静态方法的引用。
         *       语法:类::静态方法
         *    注意:
         *       在引用的方法后面,不要添加小括号。
         *       引用的这个方法,参数(数量、类型)和返回值,必须要跟接口中定义的⼀致
         */
        TestDemo01 testDemo = NumberTest::numberTest;
        System.out.println(testDemo.test(5, 3));


        /**
         * 2、非静态方法的引用。
         *       语法:对象::非静态方法
         *    注意:
         *       在引用的方法后面,不要添加小括号。
         *       引用的这个方法,参数(数量、类型)和返回值,必须要跟接口中定义的⼀致
         */
        TestDemo02 testDemo2 =new NumberTest()::numberTest02;
        System.out.println(testDemo2.test(5, 3,2));


    }
}
class NumberTest{
    /**
     * 静态方法
     * @param a
     * @param b
     * @return
     */
    public static int numberTest(int a ,int b){
        if(a > b){
            return a -b;
        }else{
            return b -a ;
        }
    }

    /**
     * 非静态方法的引用
     * @param a
     * @param b
     * @param c
     * @return
     */
    public int numberTest02(int a,int b,int c){
        if(a > b && a > c){
            return b + c;
        }else{
            return a + b + c;
        }
    }

}

interface TestDemo01{
    int test(int a,int b);
}

interface TestDemo02{
    int test(int a,int b,int c);
}

3.2 构造方法的引用

/**
 * @author zyz
 * @version 1.0
 * @Description:
 *              语法:类名::new
 *              注意事项:可以通过接口中的方法的参数, 区分引用不同的构造方法。
 */
public class LambdaTest4 {
    public static void main(String[] args) {
        //lambda表达式实现接口
        GetDog getDog = Dog::new;
        Dog dog = getDog.test();
        System.out.println("无参构造函数:->" + "姓名:" + dog.name + ",年龄:" + dog.age);

        GetDogWithParameter getDogWithParameter = Dog::new;
        Dog dog1 = getDogWithParameter.test("赛虎",11);
        System.out.println("有参构造函数:->" + "姓名:" + dog1.name + ",年龄:" + dog1.age);

    }
}

/**
 * 定义一个函数式接口,用以获取无参的对象
 */
@FunctionalInterface
interface GetDog {
    /**
     * 若此方法仅仅是为了获得一个Dog对象,而且通过无参构造去获取一个Dog对象作为返回值
     *
     * @return
     */
    Dog test();
}

/**
 * 定义一个函数式接口,用以获取有参的对象
 */
@FunctionalInterface
interface GetDogWithParameter {
    /**
     * 若此方法仅仅是为了获得一个Dog对象,而且通过有参构造去获取一个Dog对象作为返回值
     *
     * @param name
     * @param age
     * @return
     */
    Dog test(String name, int age);
}

class Dog {
    String name;
    int age;

    /**
     * 无参构造
     */
    public Dog() {
        System.out.println("一个Dog对象通过无参构造被实例化了");
    }

    /**
     * 有参构造
     *
     * @param name
     * @param age
     */
    public Dog(String name, int age) {
        System.out.println("一个Dog对象通过有参构造被实例化了");
        this.name = name;
        this.age = age;
    }
}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   110   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
5Zwip9Gh74n5