lambda表达式

Lambda表达式

一、Lambda表达式简介

什么是Lambda

Lambda 表达式,也可称为闭包,它是 Java 8 发布的新特性,实际是一个匿名方法

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)

为什么使用Lambda

使用Lambda表达式可以对一个接口进行非常简洁的实现

Lambda对接口的要求

并不是所有接口都可以用Lambda表达式实现,要求接口中定义的抽象方法只能有一个

@FunctionalInterface(函数式接口):接口中的抽象方法只有一个

二、Lambda的基础语法

一般方法构成

返回值类型 方法名 参数列表 方法体

Lambda表达式是一个匿名方法,不用加返回值类型

参数列表 方法体

() -> {}

() 用来描述参数列表

{} 用来描述方法体

-> Lambda运算符,读作goes to

//接口
//无参,无返回值
Public interface Interface1{
	void test();
}
//无返回值,单个参数
Public interface Interface2{
	void test(int n);
}
//无返回值,多个参数
Public interface Interface3{
	void test(int a,int b);
}
//有返回值,无参
Public interface Interface4{
	int test();
}
//有返回值,单个参数
Public interface Interface5{
	int test(int n);
}
//有返回值,多个参数
Public interface Interface6{
	int test(int a,int b);
}
//无参,无返回值
Interface1 lambda1 = ()->{
    	System.out.println("hello,world");
};
lambda1.test();
//hello,world

//无返回值,单个参数
Interface2 lambda2 = (int a)->{
        System.out.println("a");
};
lambda2.test(10);
//10

//无返回值,多个参数
Inerface3 lambda3 = (int a,int b)->{
        System.out.println(a+b);
};
lambda3(10,9);
//19
    
//有返回值,无参
Interface4 lambda4 = ()->{
        System.out.println("调用lambda4");    
    	return 10;
};
int ret = lambda4.test();
System.out.println(ret);
//调用lambda4
//10

//有返回值,单个参数
Interface5 lambda5 = (int a)->{
  		return a*2;  
};
int ret = lambda5.test(10);
System.out.println(ret);
//20

//有返回值,多个参数
Interface6 lambda6 = (int a,int b)->{
    return a+b;
};
int ret = lambda6.test(10,20);
System.out.println(ret);
//30

三、Lambda语法精简

1.参数

由于在接口的抽象方法中已经定义了参数类型,所以在Lambda表达式中,参数的类型可以省略

如果需要省略类型,则每一个参数类型都要省略

//无返回值,单个参数
Interface2 lambda2 = (a)->{
        System.out.println("a");
};
lambda2.test(10);
//10

//无返回值,多个参数
Inerface3 lambda3 = (a,b)->{
        System.out.println(a+b);
};
lambda3(10,9);
//19

2.参数小括号

如果参数列表中参数数量只有一个,则参数的小括号可以省略

//无返回值,单个参数
Interface2 lambda2 = a->{
        System.out.println("a");
};
lambda2.test(10);
//10

3.方法大括号

如果方法体中只有一条语句,那么此时大括号可以省略

//无参,无返回值
Interface1 lambda1 = () -> System.out.println("hello,world");
lambda1.test();
//hello,world

4.return

如果方法体中唯一的一条语句是一个返回值,则在省略大括号的同时,必须省略return

//有返回值,单个参数
Interface5 lambda5 = a -> a*2;  
int ret = lambda5.test(10);
System.out.println(ret);
//20

四、Lambda方法引用

方法引用

可以将Lambda表达式的实现指向一个已经实现的方法

语法

方法的隶属者::方法名

隶属者

静态方法
非静态方法对象

注意

  • 参数的数量和类型一定要和接口中定义的方法一致
  • 返回值的类型也一定要和接口中定义的方法一致

构造方法的引用

语法

类 :: new

//Person类
public class Person{
    public String name;
    public int age;
    public person(){
        System.out.println("调用了Person类的无参构造方法");
    }
    pubilc person(String name,int age){
        this.name = name;
        this.age = age;
        System.out.println("调用了Person类的有参构造方法");
    }
}
//CreatePerson1接口
public interface CreatePerson1{
    person	getPerson();
}

//CreatePerson2接口
public interface CreatePerson2{
    person	getPerson(String name,int age);
}
// 构造方法的引用
public static void main(String[] args){
    CreatePerson1 lambda1 = ()::new;
    Person a = lambda1.getPerson;
//调用了Person类的无参构造方法
    
    CreatePerson2 lambda2 = ()::new;
    Person b = lambda2.getPerson("Alice",18);
//调用了Person类的有参构造方法   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值