·Lambda的基本使用介绍

简介: 这篇文章详细介绍了Java中Lambda表达式的基本概念和使用方法,包括Lambda的基本语法、如何使用Lambda表达式实现接口方法、函数引用以及构造方法的引用,并通过实例代码展示了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;
    }
}
相关文章
|
2月前
|
存储 大数据 Python
案例学Python:filter()函数的用法,高级!
`filter()`函数是Python中处理序列数据的强大工具,它允许我们高效地根据条件过滤元素。通过结合匿名函数、常规函数或直接利用Python的内置逻辑,`filter()`提供了灵活且高效的过滤机制,尤其在大数据处理和内存敏感的应用中展现出其价值。掌握 `filter()`的使用,不仅能提升代码的可读性和效率,还能更好地适应Python的函数式编程风格。
45 2
|
2月前
|
Python
lambda函数简介
lambda函数简介
30 0
|
6月前
|
Python
Python教程:一文了解如何使用Lambda 表达式和 filter函数实现过滤器
在 Python 中,Lambda 表达式是一种匿名函数,也就是没有名称的函数。它允许您快速定义简单的单行函数,通常用于函数式编程中的一些场景,例如在高阶函数中作为参数传递。
254 2
|
7月前
|
Python
请解释Python中的lambda函数是什么?并举例说明其用法。
请解释Python中的lambda函数是什么?并举例说明其用法。
58 2
Python的函数式编程指南:Lambda、Map和Filter的应用
Python是一门多范式的编程语言,允许你以不同的方式编写代码,包括面向对象编程、过程式编程和函数式编程。函数式编程是一种强大的编程范式,它强调不可变性、纯函数和高阶函数的使用。本文将引导你了解Python中函数式编程的一些核心概念和技巧,特别是Lambda、Map和Filter的应用。
Python知识点:lambda 表达式
lambda 表达可以被看做是一种匿名函数。它可以让你快速定义一个极度简单的单行函数。譬如这样一个实现三个数相加的函数:
|
测试技术 Python
Python进阶语法之lambda函数
Python进阶语法之lambda函数
|
数据安全/隐私保护
零基础VB教程032期:sub过程与function自定义函数的异同专题精讲
零基础VB教程032期:sub过程与function自定义函数的异同专题精讲
|
Python
Python编程:lambda替代品-operator模块
代码中不是很推荐使用 lambda表达式 取而代之的是 operator模块,提供了很多简单函数实现
69 0
|
Python
【Python高级语法】——匿名函数(lambda)
匿名函数lambda:顾名思义,没有名字的函数,可以将其赋值给一个变量。
120 0
【Python高级语法】——匿名函数(lambda)