java 拉姆达表达式_Java λ表达式

Java Lambda表达式

在 JDK 1.8 中加入了Lambda表达式

1. 函数式编程思想

面向对象思想:

做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情。

函数式编程思想:

只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不是过程。

2. 体验Lambda的更优写法

匿名内部类的方式

new Thread(new Runnable() {

@Override

public void run() {

System.out.println(Thread.currentThread().getName()+"线程3号");

}

}).start();

Lambda 表达式的方式

new Thread(() -> {

System.out.println(Thread.currentThread().getName()+"λ");

}).start();

3. Lambda表达式的标准格式

一些参数

一个箭头

一段代码

格式:

(参数列表) -> {一些重写方法的代码};

解释说明格式:

():接口中抽象方法的参数列表,没有参数就空着;有参数就写出参数,多个参数使用逗号分隔。

->:传递的意思,把参数传递给方法体 { }

{}:重写接口的抽象方法的方法体

4. 练习:使用Lambda表达式(无参无返回)

/*

题目:

给定一个厨子Cook接口,内含唯一的抽象方法 makeFood,且无参数,无返回值

使用 Lambda表达式的标准格式调用 invokeCook方法,打印输出“吃饭啦!”字样

*/

public class Demo01Cook {

public static void main(String[] args) {

// 使用匿名内部类

invokeCook(new Cook() {

@Override

public void makeFood() {

System.out.println("吃饭啦!");

}

});

// 使用 Lambda表达式

invokeCook(() -> {

System.out.println("吃饭啦!");

});

}

public static void invokeCook(Cook cook) {

cook.makeFood();

}

}

// ====================

public interface Cook {

public abstract void makeFood();

}

5. 练习:使用Lambda表达式(有参有返回)

import java.util.Arrays;

import java.util.Comparator;

/*

需求:

使用数组存储多个Person对象,对数组中的多个Person对象

按照年龄进行升序排序,并打印输出

*/

public class Demo01Arrays {

public static void main(String[] args) {

Person[] arr = {

new Person("柳岩", 38),

new Person("迪丽热巴", 18),

new Person("马儿扎哈", 19)

};

/*Arrays.sort(arr, new Comparator() {

@Override

public int compare(Person o1, Person o2) {

return o1.getAge() - o2.getAge();

}

});*/

// 使用 Lambda表达式

Arrays.sort(arr, (Person o1, Person o2) -> {

return o1.getAge() - o2.getAge();

});

for (Person person : arr) {

System.out.println(person);

}

}

}

6. 练习:使用Lambda表达式(有参有返回)

/*

需求:

给定一个 Calculator计算器接口,内含抽象方法 calc,可以将两个 int型数字相加

返回和,使用Lambda表达式的标准格式调用 invokeCalc方法,完成120和130的计算

*/

public class DemoCalculator {

public static void main(String[] args) {

// 使用匿名内部类调用

/*invokeCalc(120, 130, new Calculator() {

@Override

public int calc(int a, int b) {

return a + b;

}

});*/

// 使用Lambda表达式调用

invokeCalc(120, 130, (int a, int b) -> {

return a + b;

});

}

public static void invokeCalc(int a, int b, Calculator c) {

int result = c.calc(a, b);

System.out.println("结果是:" + result);

}

}

// ================

public interface Calculator {

public abstract int calc(int a, int b);

}

7. Lambda的省略格式

Lambda表达式:是可推导,可省略的。

凡是根据上下文推导出来的内容,都可以省略书写。

可以省略的内容:

(参数列表):括号中参数列表的数据类型,可以省略不写。

(参数列表):括号中的参数如果只有一个,那么类型和()都可以省略。

(一些代码):如果{ }中的代码只有一行,无论是否有返回值,都可以省略({ },return,分号)。

注意:要省略{ },return,分号必须一起省略。

8. Lambda的使用前提

使用 Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。

无论是 JDK内置的Runnable、Comparator接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用 Lambda。

使用 Lambda必须具有上下文的推断。

也就是方法的参数或者是局部变量类型必须为 Lambda对应的接口类型,才能使用 Lambda作为该接口的实例。

备注:有且仅有一个抽象方法的接口,称为“ 函数式接口 ”。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值