lambda表达式

什么叫lambda表达式

是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。

为什么要引入lambda表达式

在使用GUI编写桌面程序,接触最多的是事件监听的监听事件,如果是使用正常的java匿名内部类的代码的情况,会书写很长一串代码,lambda表达式的出现,正是为了简化这一过程而写的
传统的匿名内部类书写方式

button.addActionListener(new ActionListener() {
     @Override
     public void actionPerformed(ActionEvent e) {
	      System.out.println("按钮被点击");
	  }
     }
);

现在的lambda表达式

button.addActionListener(
       event -> System.out.println("按钮被点击"));

lambda表达式具体是什么

“Lambda表达式是一种匿名函数”;
“Lambda表达式就是闭包”;
“这是函数式编程的语法”;
“Lambda表达式带来了行为参数化”;
.“C++、Java、C#、Python都支持lambda表达式”

lambda表达式之类型推断

lambda表达式就是把行为参数化,将方法作为参数写入另一个方法,这里就会涉及到参数类型的问题,在正常情况下,如果设置参数,无论是形式参数还是局部变量或者全局变量以及静态常量都要涉及到类型的说法,但是lambda是将方法作为参数传入方法,所以这里就会出现lambda的特有机制–类型推断

Map<Integer,String> map = new HashMap<>();
JDK能自己推断HashMap键值对的数据类型,从而保证正确的数据类型匹配。
lambda表达式之目标类型

lambda表达式目标类型必须是一个接口,而且该接口有且仅有一个抽象方法,对于默认或者静态方法的数量不做要求,在后续使用的时候,一定要注意参数的使用,参数位置,而且参数类型必须一致。JDK中,定义了@FunctionalInterface注解,主要是用于定义函数接口

lambda表达式之标准语法

标准语法:
(形参列表) -> {代码段}
简便语法
如果函数接口的抽象方法无参,那么左边只需打上空括号

() -> {……}

如果抽象方法的实现代码只有一句,那么,右边可以省略"{}"、return关键字

() -> 5 + 3

如果抽象方法带参,那么左边可以省略参数类型,形参名也无需持一致

(x,y) -> System.out.println(x + y)

如果抽象方法只有一个形参,那么左边可以省略"()"

str -> System.out.println(str)
lambda方法引用的三种方式

1、通过对象调用该对象的普通行为
语法 --- 对象名::实例方法名

	@FunctionalInterface
	interface A{
    int test();
}
A a = "hello"::length;
System.out.println(a.test());

2、通过类调用该对象的静态行为
语法 --- 类名::静态方法名

	@FunctionalInterface
	interface A{
    long test();
}
A a = System::currentTimeMillis;
System.out.println(a.test());

3、通过类调用该类的构造方法
语法 --- 类名::new

	@FunctionalInterface
	interface A{
   Man test(String a,int b);
}
class Man{
   private String name;
   private int age;
   public Man(String name, int age) {
     this.name = name;
     this.age = age;}
}
A  a = Man::new;
Man m = a.test(“hello”,86);
lambda方法引用的局限性

1、方法引用是一种Lambda表达式的简化缩写,但不针对所有的Lambda表达式。
2、方法引用只能对只有一条语句块,且该语句块是调用一个已有方法的Lambda表达式进行简写。
3、方法引用要求简写对应的函数接口方法的参数列表和返回类型与被调用方法保持一致

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值