Java之lambda表达式

本文介绍了Java中的Lambda表达式的基本概念及其用法,包括函数式接口、方法引用、构造器引用等内容,并通过实例展示了如何使用Lambda表达式简化代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#0 预备知识

0.1函数式接口

定义:只有一个抽象方法的接口,例如Comparator接口:

public Interface Comparator<T>{
    int compare(T first, T second);
}

值得注意的是, 函数式接口可以有别的非抽象的方法

0.2.方法引用(Method Reference)

定义:本质上是lambda的简写

System.out::println

等同于

x->
    System.out.println(x)

 方法引用的格式:

1.object::instanceMethod   =  提供方法参数的lambda

2.Class::staticMethod   =  提供方法参数的lambda

3.Class::instanceMethod   =第一个参数会成为方法的目标

0.3构造器引用

和方法引用类似,不过特指引用构造器,方法名都是new

int[]::new 
等价于
x->new int[x]

#1 感性认识lambda表达式

(String first, String second)
    ->first.length()-second.length()

#2 lambda表达式的定义&存在的意义

lambda表达式是一个代码块,或者说一个带参数的表达式,可以看做是一个函数,而不是一个对象,以后可以执行一次或多次。lambda表达式可以代替只有一个抽象方法的接口对象。

lambda表达式由三部分组成:

1.参数

2.一个代码块

3.自由变量的值(外围自由变量的值,此变量必须为实际上的最终变量)

#3 语法

1.若表达式只有一行,可以省略{},否则不能省略;

2.若表达式没有参数,就写空括号();

3.如果编译器可以推导出参数类型,就可以省略参数类型;

(first, second)
    ->first.length()-second.length();

4.如果表达式只有一个参数,且编译器可以推导出这个参数的类型,则可以省略参数和();

event->
    System.out.println("hello")

5.无需指定返回值类型,编译器可以自己推导出.

#4使用

可以用lambda表达式创建函数式接口对象

例如创建新线程:

传统的方式:

new Thread(new Runnale(){
        public void run(){
            System.out.println("使用匿名类创建新Thread");
        }
    }).start();

若使用lambda表达式

new Thread(()->

        System.out.println("使用lambda创建thread");
        
    ).start();

可以看出使用lambda表达式取代内部类,十分简洁明了

#5注意事项

lambda表达式只能赋值给明确的函数式接口对象,例如目标类型不能是Object类。

下面的操作会导致编译器报错:The target type of this expression must be a functional interface

Object obj=()->System.out.println("hello_lambda");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值