Java8发布之后,Lambda表达式,Stream等等之类的字眼边慢慢出现在我们字眼。就像是Java7出现了之后,大家看到了“钻石语法”,看到了try-with-resource等等。面对这些新东西,如果它能为我们提供方便带来不一样的改变。那么就值得去尝尝鲜。Java8出现了之后,我就扫了一眼新东西。但是实际工作中普遍使用的是Jdk1.7,1,6。所以就一直“闲置”了。而今闲了就看看。

  Lambda表达式是怎样的?

  下面将通过代码的形式来演示Lambda表达式,需要先安装JDK8.如果开发工具使用的是eclipse或者myeclipse的话,还需注意IDE的版本。版本低的还不支持Java8。

  

  Lambda表达式如何创建一个线程?

  我们知道创建线程有两种方式:

1.写一个类继承自Thread类,并实现run方法。然后,调用子类的start()方法启动线程。

2.实现Runable接口,并在run方法中写具体实现。将Runable的实现类 当做参数传递给Thread类的构造函数完成线程的创建。

第二种方法的实现写法可以如下:

       例1-1     Thread sayHello=new Thread(new Runnable() {@Overridepublic void run() {System.out.println("hello");}});sayHello.start();

上面代码很简单,Thread构造函数中接收了一个匿名函数。匿名函数返回的是一个Runnable接口实现。启动线程之后,将会输出:hello信息。

上面例1-1 中的代码如果换成lambda表达式书写的话,就会是下面这个样子:

       例1-2     Thread thread=new Thread(()-> System.out.println("hello"));thread.start();

只有两行!怎么样?这一点有没有吸引到你。比起例1-1中的代码,例1-2更简洁,一目了然。这些改变就在于这一行代码:

()-> System.out.println("hello")

这就是一个Lambda表达式。它既是一个“参数”,更是一个“动作”。 第一次看的话,会觉得很奇怪,但是大概感受一下它的作用,便可以做出理解这整个动作:()表示实现的是一个无参的方法。->后面指向的一句话 System.out.pringln("hello");这句代码是方法体的具体实现,只是打印了一句话。这样理解就很顺了。下面再来看个例子。

  使用Lambda表达式实现文件过滤

  在File操作中我们可以实现  java.io.FileFilter 类来并在其accept 方法中编写过滤文件的代码实现。本例假设在windows系统中D盘有个文件夹resource,里边有一些文件,有.jc,.html,.doc 等各种格式。现在要选出js文件。实现如下:

例2-1       //1.文件目录File fileDir=new File("D:/resource");//2.创建筛选规则FileFilter filter=new FileFilter() {@Overridepublic boolean accept(File file) {if(!file.isDirectory()&&file.getName().endsWith(".js")){return true;}return false;}};//3.得到筛选文件File[] files=fileDir.listFiles(filter);

其实功能很简单,但是代码不少。如果不是你写的,而是你在阅读别人的代码,恐怕不是一眼能看出来的。还得从上到下,把这几行都看了。但是,如果是lambda表达式写的话就会使下面这个样子:

例2-2     //1.文件目录File fileDir=new File("D:/resource");//2.筛选File [] files=fileDir.listFiles((f)->!f.isDirectory()&&f.getName().endsWith(".js"));

怎么样,看起来是不是简洁多了。

(f)->!f.isDirectory()&&f.getName().endsWith(".js")

这一行就表到了上面4,5行的含义。因为括号中只有一个参数f,所以,也可以省去括号:

f->!f.isDirectory()&&f.getName().endsWith(".js")

写到这里。Lambda表达式的“长相”和“用途”已经展示出来了。个人感觉是优雅。只是初次看到的话,可能会觉得,一个括号,一个箭头。什么玩意。

但是当你理解了之后,看起来就会顺眼了。上面的两个例子,分别介绍了有参合无参,有返回值和无返回值的情况演示。基本够用了。具体编码用的时候,根据具体逻辑写实现就好了。例子中的lambda表达式是如下两种:

()-> xxx
(x,y)->x,y的处理

可以看到,结构为  三部分,箭头前的括号是方法头部分,箭头后面的是方法体实现。可以照葫芦画瓢,举一反三来写其他类型的lambda表达式写法。

1.如何理解lambda表达式。

答:其实就是一行代码,作为参数传递。既是一个参数,又是一组有“动作”的代码。

2.为什么例2-2中的代码,(f)  参数f参数类型都没有,一般的方法不都是指明参数类型的吗。这里都没说f是File类型的,为什么会不报错呢?

答:类型推断。

Lambda表达式的类型推断

未完。。后面再更新。

转载于:https://www.cnblogs.com/demingblog/p/6051834.html

Java8之——简洁优雅的Lambda表达式相关推荐

  1. Java8新特性1:lambda表达式入门--由浅入深,从单发步枪迈向自动步枪

    本文主要参照<java8 in action>书中对lambda的讲解,来循序渐进的引入lambda表达式,了解我们为什么,以及怎么样初步学会使用lambda表达式,看完以后你会恍然大悟, ...

  2. 深圳Java培训学习:Java8.0新特性之Lambda表达式--【千锋】

    深圳Java培训学习:Java8.0新特性之Lambda表达式–[千锋] 前言 Java 8 已经发布很久了,很多报道表明Java 8 是一次重大的版本升级.本篇文章,主要给大家介绍的是lambda表 ...

  3. Java8新特性总结 - 3. Lambda表达式

    所有示例代码打包下载 : 点击打开链接 Java8新特性 :  接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/ ...

  4. java8 ie_Java8语法糖之Lambda表达式_Hudie.的博客-CSDN博客

    原文作者:编程一只蝶 原文标题:Java8语法糖之Lambda表达式 发布时间:2021-02-16 13:08:40 一.Lambda表达式简介 Lambda表达式,是Java8的一个新特性,也是J ...

  5. [Java8]_[语言特性]_[Lambda表达式说明]

    场景 我们在使用 Java 的 Comparator 进行排序, 或Runnable进行运行线程时总是需要 new 一个新的匿名类出来, 并且需要实现抽象方法,有么有更方便的做法呢? Java SE ...

  6. Java8函数式编程_9--使用Lambda表达式编写并发程序

    1,免责声明,本文大部分内容摘自<Java8函数式编程>.在这本书的基础上,根据自己的理解和网上一些博文,精简或者修改.本次分享的内容,只用于技术分享,不作为任何商业用途.当然这本书是非常 ...

  7. java8 lambda 视频_一文搞懂Java8 Lambda表达式(附带视频教程)

    Lambda表达式介绍 Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁.通过Lambda表达式,可以替代我们以前经常写的匿名内部类来实现接口.Lambda表达式本质是一个 ...

  8. 《Java8实战》笔记(03):Lambda表达式

    本文源码 Lambda 管中窥豹 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还有一个可以抛出的异常列表. Lambda表达 ...

  9. Java8————Lambda表达式(二)

    译者注:文中内容均来自于官方教程<Lambda Expressions>,但是由于英汉语言的差异,部分语句官方描述过于冗余,因此译者根据通常状况的理解做了微调,但不会影响表达的含义.比如: ...

最新文章

  1. kvo实现原理_KVC、KVO实现原理
  2. QIIME 2教程. 28社区Community(2021.2)
  3. [转]《RabbitMQ官方指南》安装指南
  4. 好代码是管出来的——.Net Core中的单元测试与代码覆盖率
  5. 我不是在吓你,但是区块链,可能真的是普通人弯道超车的最后一个机会了。
  6. 使用PLupload在同一页面中进行多个不同类型上传解决方案和一次多文件上传的注意事项...
  7. java switch的应用
  8. 详细理解中缀表达式并实现
  9. 最新迅雷“应版权方要求,文件无法下载”的解决办法
  10. Log4cpp 安装和使用
  11. 【易错】Python中for循环删除元素,有个坑,请勿入坑!!
  12. 网易微专业python数据分析_网易微专业_Python数据分析师 01 数据思维导论:如何从数据中挖掘价值?...
  13. 固定资产拆分比例怎么计算_资产拆分
  14. 研发管理进阶:边怼人边改进
  15. 到底什么是国土空间规划?
  16. 【量化金融】收益率、对数收益率、年华收益、波动率、夏普比率、索提诺比率、阿尔法和贝塔、最大回撤
  17. [转帖] 嵌入式系统词汇表
  18. Java项目:基于Jsp实现网上订餐系统
  19. java赛马游戏_Java小程序赛马游戏实现过程详解
  20. java线程调度(优先级,休眠,让步,等待)

热门文章

  1. iOS 消息推送原理及实现总结
  2. css3 各种纸张贴纸效果
  3. Bootstrap+PHP实现多图上传
  4. Android设备adb授权的原理【转】
  5. pgpool-II的性能缺陷(二)
  6. 华为荣登2015年VoIP和IMS市场榜首
  7. Git commit message和工作流规范
  8. spring显式获取bean
  9. windows server 2008虚拟化技术一览
  10. Linux Socket学习(十三)