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作为该接口的实例。
备注:有且仅有一个抽象方法的接口,称为“ 函数式接口 ”。
java λ表达式_Java λ表达式相关推荐
- java中平方的表达式_JAVA语言中的运算符和表达式
JAVA--运算符 按运算符要求的运算符个数可分为一元.二元.三元运算符: 一元运算符有一个操作数:如正数或者负数前面的"+"."-",和自增"++& ...
- java 条件表达式_Java 三目运算符
对于有些选择分支结构,可以使用简单的条件运算符来代替.如: 引用 if(a min=a; else min=b; 可以用下面的条件运算符来处理 min=(a 其中"(a 条件运算符由两个符号 ...
- java 三元表达式_Java探究心得之三元运算符
首先看一下三元运算符的格式 [条件语句] ? [表达式1] : [表达式2] 其中如条件语句为真执行表达式1,否则执行表达式2.简单的例子就不举了,来点其它的.在JDK1.5以前的版本中,表达式1和表 ...
- java which语句,java入门之表达式、语句、块
表达式.语句和块是java语言的基础.运算符(Operator)用来计算值,它和变量(Variable)构成了表达式(Expression),表达式是语句(Statement)的核心部分,而语句又构成 ...
- 10个Java 8 Lambda表达式经典示例
Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表 达式,它将允许我们将行为传到函数里.在J ...
- BeanShell中的Java指令和表达式
我的博客原址:点击此处 BeanShell 能够理解标准的 Java 指令,表达式和方法的语法.那些指令和表达式都是在一个 Java 方法中你会提到的非常常见的东西,像变量的定义和分配,方法调用,循环 ...
- 深入理解Java 8 Lambda表达式(Oracle官方文档版)
Java 8 问世三年了,9马上也要问世了,所以,嗯,我要开始学8了-- 官方文档:http://docs.oracle.com/javase/tutorial/java/javaOO/lambdae ...
- Java 8 Lambda 表达式详解
版权声明:本文由吴仙杰创作整理,转载请注明出处:https://segmentfault.com/a/1190000009186509 1. 引言 在 Java 8 以前,若我们想要把某些功能传递给某 ...
- java 的lambda表达式
2019独角兽企业重金招聘Python工程师标准>>> 为什么使用 Lambda 表达式 lLambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码( ...
最新文章
- react input[type='number']
- asp.net动态添加控件学习
- Logstash配置语法及相关命令
- 阿里P8架构师谈:主流RPC框架详解,以及与SOA、SOAP、REST的区别
- activiti动态办理人_安全生产许可证办理相关问题
- 自定义控件添加属性_|AutoCAD LT 2019 Mac自定义功能区的方法
- html里面怎么ul加高度,div里面嵌套了ul,为什么div的高度小于ul高度
- Windows Terminal Preview 1.3 发布
- 洛谷 P2056 采花
- ML算法整理(一)线性回归与梯度下降 python实现
- html不使用cache数据
- Disk for DB is too low. Cassandra state detected DOWN. Disk space for DB not retrievable
- 编程语言试验之Antlr4+JavaScript实现圈4
- 上班族难懂五险一金 交的越多是否越吃亏
- 普通台式机上Tesla M40显卡paddleGPU深度学习柯南的变身器上机体验
- win10安装IIS时报错windows无法请求的更改,错误代码0x8007057解决办法2017年10月15日
- 大数据技术学习,深度挖掘大数据的现状分析
- 标准模式和怪异模式指的是什么?
- 打印机无法确认设备和计算机之间的连接,打印机和电脑连接不上怎么办_电脑怎么连接不上打印机设备-win7之家...
- 8、Hudson集成服务器的安装配置与使用
热门文章
- linq语句复杂查询和分开查询的性能对比
- Mysql自动备份脚本
- glCullFace,GL_CULL_FACE
- 【转载】PHP报错分析(Corrupted encoded data detected in)
- 用 for/in 在 Java 5.0 中增强循环
- python语言程序设计基础网课-宜昌2020年_高校邦_Python程序设计基础【实境编程】...
- python入门基础知识教程-Python基础知识入门,这三个原则是你要知道的,还有教程...
- python爬虫吧-python爬虫-爬取百度贴吧帖子加图片
- python测试开发自学教程-2019第一期《python测试开发》课程,10月13号开学
- python教程书籍-程序员大佬,给Python零基础入门书籍教程的一些建议!