菜鸟理解Lamdba表达式
2024-10-08 16:49:57
简单的说就是Java 1.8后给出个简化代码的方式,
Java面向对象过分强调必须通过对象的形式来完成任务,而函数思想则尽量忽略面向对象的复杂语法,强调做什么,而不是以什么形式做。
举个栗子!
首先创建一个接口
package com.mju.band3; public interface Cook { public void MakeFood( ); }
接着我们用匿名内部类,Lambda表达式和简化Lambda来玩玩看 //匿名内部类,invokeCook参数是Cook,使用匿名内部类new一个Cook你懂我意思吧?
package com.mju.band3; public class CookLambda { public static void main(String[] args) { invokeCook(new Cook() {
@Override
public void MakeFood() {
System.out.println("吃饭饭");
}
}); //Lambda表达式:括号代表的是Cook的(),有参数那就往里面传参,下面我会有个传参数的例子->代表前面的参数传递给后面的代码,后面的输出语句就是业务逻辑代码
>
invokeCook(()->{
System.out.println("我也吃饭饭");
});
//简化Lambda
1:(参数列表)小括号内的参数类型可以省略
2:(参数列表)括号中的参数如果只有一个,那么参数和类型都可以省略
3:(一些代码)如果{}中代码只有一行,无论有无返回值,都可以省略{},return,分号,不过要注意要省略的话这三个得都省略,不能只省略其中几个,
invokeCook(()-> System.out.println("我也他妈要吃饭饭"));
} public static void invokeCook(Cook cook){
cook.MakeFood(); } } ==========================================================================================================================================
再来个有参数例子
package com.mju.band3; public interface Culator { public int carulater(Integer a,Integer b);
}
package com.mju.band3; public class Cualter {
public static void main(String[] args) {
// invokeCul(10, 20, new Culator() {
// @Override
// public int carulater(Integer a, Integer b) {
// return a+b;
// }
// });
invokeCul(10,20,(a,b)->{
return a+b;
}); invokeCul(10,20,(a,b)->a+b); } public static void invokeCul(int a,int b,Culator c){
int sum =c.carulater(a,b);
System.out.println(sum); }
}
最后要注意一下,使用Lambda必须具有接口,且接口中有且只有一个抽象方法
使用Lambda必须具有上下文推断,也就是方法的参数或局部变量必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例
最新文章
- 东大OJ-5到100000000之间的回文质数
- Asp.net 执行回调操作后 无法更新ViewState的问题
- 关于Integer类中parseInt()和valueOf()方法的区别以及int和String类性的转换.以及String类valueOf()方法
- oc 一些通用函数
- VS2010升级VS2012必备(MVC4 WebPage2.0 Razor2.0资料汇集)
- QWebView 显示本地HTML 文件
- Qt5:窗口各类位置
- Redis安装与卸载
- appium+python搭建自动化测试框架_TestAPP框架(三)
- js中的数据类型、以及浅拷贝和深拷贝
- 阅读【现代网络技术 SDN/NFV/QOE 物联网和云计算】 第一章
- GoldenGate 12.3 MA架构介绍系列(2) - 数据同步测试
- nginx内置变量详解-乾颐堂
- win10下Visual Studio 2015,C++ x64编译zmq
- PHP代码优化小笔记
- 机器学习:集成学习(集成学习思想、scikit-learn 中的集成分类器)
- 安装了多个php版本,如何编译扩展
- NYOJ1238 最小换乘 (dijkstra)
- 通过slf4j/log4j的MDC/NDC 实现日志追踪
- jmeter diff测试(调用JAR包处理)
热门文章
- [转载]JDK自带的实用工具——native2ascii.exe
- partialview 用法
- 简单模拟IOC容器:为添加了@Autowired的属性赋值(初始值)
- Vue.js模板语法介绍
- scikitlearn库中调用k-近邻算法的操作步骤
- 一、Linux&;配置,依赖安装&;Tomcat,Mysql,jdk安装
- CPU、内存、硬盘之间的关系
- 回过头来看一看过去20年的十大IT趋势
- web.xml CharacterEncodingFilter
- Django null=True和blank=True的区别