根据我的观察,Lambda是一种比较灵活的形式,需要多看几个案例才能明白它。

Lambda是一种简化代码的技术手段,主要用于简化匿名实现类,允许把函数作为一个方法的参数传递进方法中。它本身并不会创造出新的概念和功能来。不过现在很多开源项目都使用到这种技术,我的原则是能看懂别人代码即可。

Lamdba 优点:

如果你的代码中有地方需要接口回调套接口回调,有可能套了好几层,虽然这种情况出现的概率比较低,但是一旦出现这种代码,lambda表达式的这个简洁,就很适合这种场景。

Lamdba 缺点:

缺点也是它的简洁,由于省略了太多东西,代码可读性有可能在一定程度上会降低,这个完全取决于你使用lambda表达式的位置所设计的API是否被你的代码的其他阅读者所熟悉。

使用语法:

(参数类型 参数名, 数参数类型 参数名2...) -> {
// code
};

没有参数的案例

传统写法:

public static void general() {
// 用匿名内部类的方式来创建线程
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Hello World.");
}
}).run();
}

Lambda 写法:

public static void lambda() {
// 使用Lambda来创建线程
new Thread(() -> System.out.println("Hello Lambda!")).run();
}

有参数,有返回值的案例

1个参数,一个返回值

public static void oneParam() {
// Consumer<String> con = (s) -> System.out.println(s); // 参数的小括号可以省略。
Consumer<String> con = s -> System.out.println(s);
con.accept("oneParam Test!");
}

2个参数,一个返回值

interface Calculator {
int calculate(int a, int b);
} public class Main {
public static void main(String[] args) {
Calculator calculator = (a, b) -> a + b; int result = calculator.calculate(5, 3);
System.out.println(result);
}
}

语法说明:

  • (a,b) 参数类型是可以省略的,编译器会根据上下文推断出参数类型。当然,这种省略并不是必须的,你也可以显式地指定参数类型;
  • a + b ,在Lambda表达式的主体中,如果主体只有一条表达式,那么这条表达式的结果将被隐式地作为Lambda表达式的返回值,并且这个大括号都是可以省略的。当然,你也可以使用了显式的return语句来返回结果。

和上面一样的代码,但是使用显示:

interface Calculator {
int calculate(int a, int b);
} public class Main {
public static void main(String[] args) {
Calculator calculator = (int a, int b) -> {
return a - b;
}; int result = calculator.calculate(5, 3);
System.out.println(result);
}
}

函数式接口@FunctionalInterface

TODO

What is Lambda?的更多相关文章

  1. 你知道C#中的Lambda表达式的演化过程吗?

    那得从很久很久以前说起了,记得那个时候... 懵懂的记得从前有个叫委托的东西是那么的高深难懂. 委托的使用 例一: 什么是委托? 个人理解:用来传递方法的类型.(用来传递数字的类型有int.float ...

  2. Linq表达式、Lambda表达式你更喜欢哪个?

    什么是Linq表达式?什么是Lambda表达式? 如图: 由此可见Linq表达式和Lambda表达式并没有什么可比性. 那与Lambda表达式相关的整条语句称作什么呢?在微软并没有给出官方的命名,在& ...

  3. 背后的故事之 - 快乐的Lambda表达式(一)

    快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...

  4. Kotlin的Lambda表达式以及它们怎样简化Android开发(KAD 07)

    作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式 ...

  5. Lambda

    Lambda Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可作为参数传递或作为函数调用值返回的本地函数. Lambda 表达式对于编写 LI ...

  6. 9、委托、事件、Lambda

    开始 关于委托,肯定是要有问题的. 第一个问题,委托用来干什么? 看.net中的表述:在.net平台下,委托类型用来定义和相应应用程序中的回调.(回调?处理内存中两个实体双向通信的一种技术.)   第 ...

  7. java8中lambda表达式的应用,以及一些泛型相关

    语法部分就不写了,我们直接抛出一个实际问题,看看java8的这些新特性究竟能给我们带来哪些便利 顺带用到一些泛型编程,一切都是为了简化代码 场景: 一个数据类,用于记录职工信息 public clas ...

  8. 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】

    前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...

  9. 如何设计一门语言(七)——闭包、lambda和interface

    人们都很喜欢讨论闭包这个概念.其实这个概念对于写代码来讲一点用都没有,写代码只需要掌握好lambda表达式和class+interface的语义就行了.基本上只有在写编译器和虚拟机的时候才需要管什么是 ...

  10. Speedment -- 利用lambda编写SQL

    众所周知Java8中加入了lambda语法,这一特性也帮助Java开发者极大的简化了开发.Speedment是一个利用lambda表达式操作数据库的框架,相比Java世界中现在非常流行的mybatis ...

随机推荐

  1. 关于VS2022使用EF生成实体模型报错的问题:运行转换:System.NullReferenceException:对象引用未设置为对象的示例。

    起因: 之前版本vs2022生成EF模型一直没有问题,在更新了最新的vs2022之后,版本号17.6+,出现此问题: 运行转换:System.NullReferenceException:对象引用未设 ...

  2. 尚医通day09-【用户平台搭建详细步骤】(内附源码)

    页面预览 首页 医院详情 第01章-服务器端渲染和客户端渲染 1.搜索引擎优化 1.1.什么是搜索引擎优化 SEO 是网站为了获得更多的流量,对网站的结构及内容进行调整和优化,以便搜索引擎 (百度,g ...

  3. 消失的死锁:从 JSF 线程池满到 JVM 初始化原理剖析

    一.问题描述 在一次上线时,按照正常流程上线后,观察了线上报文.接口可用率十分钟以上,未出现异常情况,结果在上线一小时后突然收到jsf线程池耗尽的报警,并且该应用一共有30台机器,只有一台机器出现该问 ...

  4. js修改css样式

    修改宽度: document.getElementById("div1").style.width="200px"; 修改border-radius: docu ...

  5. 2. Tomcat-Servlet

    1. Tomcat ‍ ​​ ‍ 目录结构说明: bin 可执行文件目录 conf 配置文件目录 lib 存放 lib 的目录 logs 日志文件目录 webapps 项目部署的目录 work 工作目 ...

  6. Python开发中自动化构建项目结构样式

    摘要:在项目开发过程中,一个良好的项目结构对于团队的协作和代码的可维护性起着重要作用.通过使用自动生成项目结构文字样式的工具.不仅节省了手动编写项目结构的麻烦,还确保了结构的一致性和准确性. 本文分享 ...

  7. Transaction rolled back because it has been marked as rollback-only大概问题及解决方法

    Transaction rolled back because it has been marked as rollback-only 问题:前几天遇到一个问题,代码没有抛出我想要的带自定义提示消息的 ...

  8. Health Kit 新版本功能解析,给你丰富运动体验!

    华为运动健康服务(HUAWEI Health Kit)6.11.0版本新鲜出炉! 开放活力三环数据助力养成运动习惯,新增水肺潜水.户外探险数据开放-- 丰富运动体验,尽在Health Kit,一起来看 ...

  9. 为什么使用ioutil.ReadAll 函数需要注意

    1. 引言 当我们需要将数据一次性加载到内存中,ioutil.ReadAll 函数是一个方便的选择,但是ioutil.ReadAll 的使用是需要注意的. 在这篇文章中,我们将首先对ioutil.Re ...

  10. 云储存选择做Hexo博客图床(腾讯云、七牛云、网易云)

    前言 博客里需要添加很多图片作为内容的补充,但是把图片放在本地博客文件夹里,上传到网上后,加载这些图片就是一个很大的问题,他们会拖累网页加载的速度,所以建议把图片放图床里,通过外链来访问和加载这些图片 ...