Lambda表达式在Java 8中的简单应用
我一直试图在我编写的代码中放入lambda表达式,而这个简单的例子就是相同的结果。 对于那些完全不了解Java中的Lambda表达式的人,我建议他们在进入本文之前先阅读此内容 。
好的,现在您已经熟悉了Lambda表达式(在阅读了介绍性文章之后),让我们进入一个简单的示例,我认为它是Lambda表达式的一种很好的用法。
考虑这种情况:某种操作被一些预处理和一些后处理所包围。 并且要执行的操作可能会根据
预期的行为。 预处理代码提取操作所需的参数,后处理进行必要的清理。
让我们看看如何通过匿名内部类使用接口及其实现来完成此工作。
使用匿名内部类
必须实现以提供所需行为的接口:
interface OldPerformer {public void performTask(String id, int status);
}
让我们看一下执行预处理,执行所需操作然后进行后处理的方法:
public class PrePostDemo {static void performTask(String id, OldPerformer performer) {System.out.println("Pre-Processing...");System.out.println("Fetching the status for id: " + id);int status = 3;//Some status value fetchedperformer.performTask(id, status);System.out.println("Post-processing...");}
}
我们需要传递2件事-一个标识符来执行预处理和该操作的实现,如下所示:
public class PrePostDemo {public static void main(String[] args) {//has to be declared final to be accessed within//the anonymous inner class.final String outsideOfImpl = "Common Value";performTask("1234", new OldPerformer() {@Overridepublic void performTask(String id, int status) {System.out.println("Finding data based on id...");System.out.println(outsideOfImpl);System.out.println("Asserting that the status matches");}});performTask("4567", new OldPerformer() {@Overridepublic void performTask(String id, int status) {System.out.println("Finding data based on id...");System.out.println(outsideOfImpl);System.out.println("Update status of the data found");}});}
}
如上所述,在匿名内部类外部声明的变量必须声明为最终变量,才能在匿名内部类的方法中访问它们。 上面代码的输出为:
Pre-Processing...
Fetching the status for id: 1234
Finding data based on id...
Common Value
Asserting that the status matches
Post-processing...
Pre-Processing...
Fetching the status for id: 4567
Finding data based on id...
Common Value
Update the status of the data found
Post-processing...
使用Lambda表达式
让我们看看如何使用lambda表达式编写上面的代码:
public class PrePostLambdaDemo {public static void main(String[] args) { //Need not be declared as final for use within a //lambda expression, but has to be eventually final.String outsideOfImpl = "Common Value";doSomeProcessing("123", (String id, int status) -> {System.out.println("Finding some data based on"+id);System.out.println(outsideOfImpl);System.out.println("Assert that the status is "+status );});doSomeProcessing("456", (String id, int status) -> {System.out.print("Finding data based on id: "+id);System.out.println(outsideOfImpl);System.out.println("And updating the status: "+status);});}static void doSomeProcessing(String id, Performer performer ){System.out.println("Pre-Processing...");System.out.println("Finding status for given id: "+id);int status = 2;performer.performTask(id, status);System.out.println("Post-processing...");}
}interface Performer{
public void performTask(String id, int status);
}
除了有趣的lambda表达式语法外,lambda表达式范围之外的变量未声明为final。 但这必须是最终的,这意味着变量的值:outsideOfImpl一旦声明就不应修改。
这只是使用lambda表达式代替匿名内部类的另一种更简洁的方法。
分手说明:JDK 8的计划发布已进一步推迟到2014年2月,可以在此处找到完整的计划。 我正在使用lambda项目,该项目每天都在更新,因此,请随时告诉我这种情况是否不适用于最新版本。 我将尽我所能继续更新构建,并尝试这里发布的示例。
另一个注意事项:不要对Java 8中发生的事情不知所措,这些功能现在已经成为许多编程语言的一部分。 我发现学习Java中的lambda表达式的语法和方法有助于我理解和思考功能,更具体地说,是了解Scala闭包。
翻译自: https://www.javacodegeeks.com/2013/05/a-simple-application-of-lambda-expressions-in-java-8.html
Lambda表达式在Java 8中的简单应用相关推荐
- 使用NetBeans Lambda支持在Java 8中使用Lambda表达式对列表进行排序
作为JSR 335的一部分, Lambda表达式已从Java 8开始引入Java语言,这是Java语言的一个重大变化. 如果您想了解更多关于Lambda表达式以及JSR 335的信息,可以访问以下资源 ...
- lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
- 采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集
采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...
- 利用Lambda表达式从实体集合中筛选出符合条件的实体集合
前言 已知存在两张表:表A和表B,表A中有一个字段存储的是表B的部分Id集合,以字符串的形式存储,如图1-1所示: 图1-1 表A中的字段 现在我获取到了表A中这个字段的值和表B中所有数据的实体集合, ...
- java惰性计算原理_利用 Lambda 表达式实现 Java 中的惰性求值
Java 中惰性求值的潜能,完全被忽视了(在语言层面上,它仅被用来实现 短路求值 ).更先进的语言,如 Scala,区分了传值调用与传名调用,或者引入了 lazy 这样的关键字. 尽管 Java 8 ...
- 匿名内部类以及Lambda表达式(Java和C#)
就来说一说这个匿名内部类,用Java做例子,后面插一点c#.这个东西我之前也知道了很久,一直没有认真去看过,这次就来看看吧,今天的代码量相对很多. 匿名内部类 这里就说匿名内部类,关于其他内部类老规矩 ...
- Lambda表达式(Java)
我们都知道Java 8 支持Lambda表达式,但是平时开发中也很难用到这个东东,但是作为专业的程序员,技多不压身(其实我是在学Kotlin中,发现里面大量的运用到了Lambda表达式,看的我一脸懵逼 ...
- lambda表达式或者匿名函数中为什么要求外部变量为final
1.参考博客 关于Lambda表达式里面修改外部变量问题 JDK8之前,匿名内部类访问的局部变量为什么必须要用final修饰 2.匿名内部类 在jdk7之前,匿名内部类访问外部类的局部变量时,那么这个 ...
- 4.File类、Lambda表达式、JAVA IO
一.File类 File类的每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径),使用File可以做到: 1:访问其表示的文件或目录的属性信息,例如:名字,大小,修改时间 ...
最新文章
- vue select js 设置默认值
- bzoj3396[Usaco2009 Jan]Total flow 水流*
- WinCE项目-UPS电源管理系统
- 基于 DataLakeAnalytics 做跨地域的数据分析
- java 面板 选择颜色_[代码全屏查看]-java颜色选择器
- python 实现的键盘记录器 小功能
- Android view 小总结
- linux运行jps五行结果,Linux系统性能监控
- linux中^]是如何输出的
- Jenkins在Windows下的安装与配置
- 智能图形开发板SmartGLCD
- 5gwifi信道哪个最好,wifi信道在哪里设置如何检测哪个路由器信道最快
- Python批量移动文件到指定目录
- mysql批量插入死锁的问题
- android内录音软件,安卓内录声音软件(能内录音频的手机软件)
- 微信号下方菜单如何设置
- 【Windows】如何关闭svchost,win10系统svchost下载占网速,无缘无故下载软件
- 全自动加药装置详细介绍
- 虾米带你轻松搞定Vuejs 系列
- Qt 解析 DXF 文件
热门文章
- oracle 更新参数,Oracle动态、静态参数参数修改规则
- 减一天 日期函数_一文掌握excel中的日期函数
- dismiss的词组_法律英语常用词必记:Dismiss
- java restful接口开发实例_实战:基于Spring Boot快速开发RESTful风格API接口
- 【1】flink-source读取数据
- openfire client聊天消息交互和存储离线(在线)消息记录策略
- ogm neo4j_Neo4J OGM与Quarkus
- jdk8 获取上一个月时间_JDK 10:FutureTask获取一个toString()
- kafka streams_Kafka REST Proxy for MapR Streams入门
- red hat 4.1.2_安装Red Hat Container Development Kit 2.2版本