java进阶(lamda表达式)

本文详细介绍了Java中的Lambda表达式及其与匿名内部类的区别,强调Lambda表达式的简洁性。同时,文章讲解了方法引用的概念,包括静态方法引用、实例方法引用和构造方法引用,并通过示例代码进行说明。最后,总结了Lambda表达式和方法引用在简化代码和提高效率方面的优势。
摘要由CSDN通过智能技术生成

java进阶(lamda表达式)

lamda表达式

lamda表达式的语法

在这里插入图片描述

public class lamda1 {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类创建方式");
            }
        });
        thread.start();
        Thread thread1 = new Thread(() -> {
            System.out.println("lamda表达式创建的");
        });
        thread1.start();
    }
}

通过与匿名内部类的对比
lamda表达式实现new Runnable()接口的代码量更少更简单

lamda表达式的前提

Labmda表达式需要函数式编程接口
在这里插入图片描述
@FunctionalInterface注解(标记着这个接口只有一个抽象方法)

注意点
Lambda返回的是接口的实例对象
有没有参数、参数有多少个、需不需要有返回值、返回值的类型是什么---->选择自己合适的函数式接口

方法引用

// 方法引用写法
Consumer<String> consumer = System.out::println;
consumer.accept("Java3y");
// 普通的Lambda写法
Consumer<String> consumer = s -> System.out.println(s);
consumer.accept("Java3y");

在这里插入图片描述

作者:Java3y
链接:https://www.zhihu.com/question/37872003/answer/1009015660
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

public class Demo {
    public static void main(String[] args) {
        // 静态方法引用--通过类名调用
        Consumer<String> consumerStatic = Java3y::MyNameStatic;
        consumerStatic.accept("3y---static");

        //实例方法引用--通过实例调用
        Java3y java3y = new Java3y();
        Consumer<String> consumer = java3y::myName;
        consumer.accept("3y---instance");

        // 构造方法方法引用--无参数
        Supplier<Java3y> supplier = Java3y::new;
        System.out.println(supplier.get());
    }
}

class Java3y {
    // 静态方法
    public static void MyNameStatic(String name) {
        System.out.println(name);
    }

    // 实例方法
    public void myName(String name) {
        System.out.println(name);
    }

    // 无参构造方法
    public Java3y() {
    }
}

总结
Lambda表达式返回的是接口对象实例,如果函数式接口的实现恰好可以通过调用一个方法来实现,那么我们可以使用方法引用来替代Lambda表达式

// Supplier是一个无入参带返回的值的函数式编程接口

// () -> new Java3y()这整句Lambda表达式,返回的是Supplier接口的实例。从Lambda表达式可以看出无参数,带返回值
Supplier<Java3y> supplier = () -> new Java3y(); 

// 由于这个“() -> new Java3y()”Lambda表达式可以通过调用一个方法就实现了,那么我们可以优化成方法引用
Supplier<Java3y> supplier2 = Java3y::new;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值