Java笔记 - Lambda表达式

本文详细介绍了Java中的Lambda表达式,包括其概念、函数式接口、@FunctionalInterface注解、不同类型的lambda表达式语法以及如何进行简化。此外,还讲解了函数引用的三种形式:静态方法引用、非静态方法引用和构造方法引用。通过实例展示了Lambda表达式在实际代码中的应用,帮助读者更好地理解和运用这一功能。

一、Lambda表达式概念

从本质来讲,是一个匿名函数。可以使用这个匿名函数,实现接口中的方法,对接口进行非常简洁的实现。

 

1、函数式接口

如果说一个接口中,要求实现必须实现的抽象方法,有且只有一个。这样的接口,就是函数式接口。

 

2、@FunctionalInterface

用在接口之前,判断这个接口是否是一个函数式接口。

 

3、lambda表达式语法

public class BasicSyntax {
    public static void main(String[] args) {
        // 1、无参无返回值
        NoneReturnNoneParameter lambda1 = () -> {
            System.out.println("无参无返回值");
        };
        lambda1.test();

        // 2、一个参数无返回值
        NoneReturnOneParameter lambda2 = a -> System.out.println(a);
        lambda2.test("ooooo");

        // 3、多个参数无返回值
        NoneReturnMutipleParameter lambda3 = (a, b) -> {
            System.out.println(a + b);
        };
        lambda3.test(1, 2);

        //4、有参数有返回值
        OneReturnMutipleParameter lambda4 = (a, b) -> a + b;
        int test = lambda4.test(10, 20);
        System.out.println(test);
    }
}

 

4、lambda表达式的精简

(1)参数的类型可以省略

(2)如果只有一个参数,参数的小括号可以省略

(3)函数体只有一行且没有返回值,大括号可以省略

(4)函数体只有一行且是返回值,大括号和return都可以省略

 

5、函数引用

(1)静态方法的引用

    类 ::静态方法

public class Lambda1 {
    private static interface Calculate {
        int calculate(int a, int b);
    }

    // 函数引用
    public static void main(String[] args) {
        //Calculate calculate = (x,y) -> calculate(x,y);
        Calculate calculate = Lambda1::calculate;
    }

    private static int calculate(int x, int y) {
        return x + y;
    }
}

(2)非静态方法引用

    对象::非静态方法

public class Lambda2 {
    private static interface Calculate {
        int calculate(int a, int b);
    }

    // 函数引用
    public static void main(String[] args) {
        Calculate calculate = new Lambda2()::calculate;
        //Calculate calculate = (x,y) -> calculate(x,y);
    }

    private  int calculate(int x, int y) {
        return x + y;
    }
}

(3)构造方法引用

    类名::new

public class Lambda3 {
    
    private static class Person{}
    
    @FunctionalInterface
    protected interface GetPerson{
        Person get();
    }
    
    public static void main(String[] args) {
        // GetPerson getPerson = () -> new Person();   
        GetPerson getPerson = Person::new;
    }
}

注:笔记整理于B站前锋大数据学习营 lambda表达式课程,致谢!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值