我一直试图在我编写的代码中放入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闭包。

参考:来自JCG合作伙伴 Mohamed Sanaulla的Java 8中的Lambda表达式的简单应用程序,来自Experiences Unlimited博客。

翻译自: https://www.javacodegeeks.com/2013/05/a-simple-application-of-lambda-expressions-in-java-8.html

Lambda表达式在Java 8中的简单应用相关推荐

  1. 使用NetBeans Lambda支持在Java 8中使用Lambda表达式对列表进行排序

    作为JSR 335的一部分, Lambda表达式已从Java 8开始引入Java语言,这是Java语言的一个重大变化. 如果您想了解更多关于Lambda表达式以及JSR 335的信息,可以访问以下资源 ...

  2. lambda 对象去重_采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集...

    采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...

  3. 采用java8 lambda表达式 实现 java list 交集 并集 差集 去重复并集

    采用java8 lambda表达式 实现java list 交集/并集/差集/去重并集 一般的javaList 交.并集采用简单的 removeAll retainAll 等操作,不过这也破坏了原始的 ...

  4. 利用Lambda表达式从实体集合中筛选出符合条件的实体集合

    前言 已知存在两张表:表A和表B,表A中有一个字段存储的是表B的部分Id集合,以字符串的形式存储,如图1-1所示: 图1-1 表A中的字段 现在我获取到了表A中这个字段的值和表B中所有数据的实体集合, ...

  5. java惰性计算原理_利用 Lambda 表达式实现 Java 中的惰性求值

    Java 中惰性求值的潜能,完全被忽视了(在语言层面上,它仅被用来实现 短路求值 ).更先进的语言,如 Scala,区分了传值调用与传名调用,或者引入了 lazy 这样的关键字. 尽管 Java 8 ...

  6. 匿名内部类以及Lambda表达式(Java和C#)

    就来说一说这个匿名内部类,用Java做例子,后面插一点c#.这个东西我之前也知道了很久,一直没有认真去看过,这次就来看看吧,今天的代码量相对很多. 匿名内部类 这里就说匿名内部类,关于其他内部类老规矩 ...

  7. Lambda表达式(Java)

    我们都知道Java 8 支持Lambda表达式,但是平时开发中也很难用到这个东东,但是作为专业的程序员,技多不压身(其实我是在学Kotlin中,发现里面大量的运用到了Lambda表达式,看的我一脸懵逼 ...

  8. lambda表达式或者匿名函数中为什么要求外部变量为final

    1.参考博客 关于Lambda表达式里面修改外部变量问题 JDK8之前,匿名内部类访问的局部变量为什么必须要用final修饰 2.匿名内部类 在jdk7之前,匿名内部类访问外部类的局部变量时,那么这个 ...

  9. 4.File类、Lambda表达式、JAVA IO

    一.File类 File类的每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径),使用File可以做到: 1:访问其表示的文件或目录的属性信息,例如:名字,大小,修改时间 ...

最新文章

  1. vue select js 设置默认值
  2. bzoj3396[Usaco2009 Jan]Total flow 水流*
  3. WinCE项目-UPS电源管理系统
  4. 基于 DataLakeAnalytics 做跨地域的数据分析
  5. java 面板 选择颜色_[代码全屏查看]-java颜色选择器
  6. python 实现的键盘记录器 小功能
  7. Android view 小总结
  8. linux运行jps五行结果,Linux系统性能监控
  9. linux中^]是如何输出的
  10. Jenkins在Windows下的安装与配置
  11. 智能图形开发板SmartGLCD
  12. 5gwifi信道哪个最好,wifi信道在哪里设置如何检测哪个路由器信道最快
  13. Python批量移动文件到指定目录
  14. mysql批量插入死锁的问题
  15. android内录音软件,安卓内录声音软件(能内录音频的手机软件)
  16. 微信号下方菜单如何设置
  17. 【Windows】如何关闭svchost,win10系统svchost下载占网速,无缘无故下载软件
  18. 全自动加药装置详细介绍
  19. 虾米带你轻松搞定Vuejs 系列
  20. Qt 解析 DXF 文件

热门文章

  1. oracle 更新参数,Oracle动态、静态参数参数修改规则
  2. 减一天 日期函数_一文掌握excel中的日期函数
  3. dismiss的词组_法律英语常用词必记:Dismiss
  4. java restful接口开发实例_实战:基于Spring Boot快速开发RESTful风格API接口
  5. 【1】flink-source读取数据
  6. openfire client聊天消息交互和存储离线(在线)消息记录策略
  7. ogm neo4j_Neo4J OGM与Quarkus
  8. jdk8 获取上一个月时间_JDK 10:FutureTask获取一个toString()
  9. kafka streams_Kafka REST Proxy for MapR Streams入门
  10. red hat 4.1.2_安装Red Hat Container Development Kit 2.2版本