这些天看见另一本好书《给大忙人看的Java SE 8》,其中的新特性 StreamAPI 和 lambda表达式 是之前jdk没有提供的新特性,也是jdk8 重要的更新内容,我会总结一下它们的用法,更详细的参见书本。

  1. lambda表达式的概念
    人对一个概念的理解是随着时间渐渐加深的,之前也见过lambda表达式,但那时候学起来完全摸不到头脑,这两天重新去看,终于有了一些概念,可以想象,过段时间会更加知道为什么会有lambda表达式,大牛们为什么会去设计这种函数式语言?

java里大家都知道匿名函数,下面是一个多线程的创建例子:

package JDK;/*** Created by panqian on 2017/2/20.*/
public class Lambda_1 {public static void main(String[] args) {//传统创建线程new Thread(new Runnable() {@Overridepublic void run() {System.out.println("传统创建线程");}}).start();//使用lambda表达式new Thread(()->{System.out.println("lambda表达式");}).start();}
}

同样是传入Runnable实现类,lambda表达式的写法比传统的更加简洁。再看一个集合排序
 List<Integer> list = new ArrayList<>();list.add(3);list.add(1);list.add(2);System.out.println("排序前: " + list.toString());Collections.sort(list, (Integer x, Integer y) -> {return x > y ? 1 : -1;});System.out.println("排序后: " + list.toString());

可以看出 lambda表达式由 参数((Integer x, Integer y)),剪头(->),代码块({
return x > y ? 1 : -1; })组成。 lambda表达式很大的一个使用场景就是替代java的内部类,做到代码简洁,易读。

2.方法引用
对于上面的代码还不是最简洁的,如果在lambda表达式中引用别的方法,可以拿lambda表达式里面的方法引用:

拿前面集合排序的例子继续简化:

List<Integer> list1 = new ArrayList<>();
list1.add(3);
list1.add(1);
list1.add(2);System.out.println("排序前: " + list1.toString());//::前面是类,后面是方法,压缩到只有一句,等同于
//
//  (Integer x, Integer y) -> {
//      return Integer.compare(x,y);
//  }
list1.sort(Integer::compare);System.out.println("排序前: " + list1.toString());

可以看出它由

对象::实例方法
类::静态方法

格式组成

Integer::compare这个表达式没有参数,它会根据上下文自动判断应该传入什么参数,达到排序的目的。

未完待续

转载于:https://www.cnblogs.com/lovejj1994/p/7182158.html

JAVA 8 StreamAPI 和 lambda表达式 总结(一)--lambda表达式相关推荐

  1. java 8 lambda reduce_JDK8新特性Lambda表达式体验

    "Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstra ...

  2. java lambda使用_Java 8 Lambda表达式的使用

    lambda表达式允许你通过表达式来代替功能接口.lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块). Lambda表达式还增 ...

  3. java 文件路径表达式_Java基础(二十二) Lambda表达式和File类

    函数式编程思想 强调的是做什么,而不是以什么样的方式来做,它忽略了面向对象的复杂语法,只要能够获取到结果,谁去做的,怎么做的,都不重要,重要的是结果,不重视过程. 冗余的Runnable代码 传统的写 ...

  4. java compare 返回值_关于Java你不知道的那些事之Java8新特性[Lambda表达式和函数式接口]...

    前言 为什么要用Lambda表达式? Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,将代码像数据一样传递,这样可以写出更简洁.更灵活的代码,作为一个更紧凑的代码风 ...

  5. Java新特性:Java8函数式接口与Lambda表达式(一)

    摘要 何为函数式接口? 什么是lambda表达式,lambda表达式的本质: 函数式接口与lambda表达式的联系:lambda是实现函数式接口的一个快捷方式,可以作为函数式接口的一个实例: 常用Ja ...

  6. 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-language- ...

  7. 深入学习Java8 Lambda (default method, lambda, function reference, java.util.function 包)

    Java 8 Lambda .MethodReference.function包 多年前,学校讲述C#时,就已经知道有Lambda,也惊喜于它的方便,将函数式编程方式和面向对象式编程基于一身.此外在使 ...

  8. java lambda 实现_Java 8 Lambda实现原理分析

    PDF文档已上传Github 为了支持函数式编程,Java 8引入了Lambda表达式,那么在Java 8中到底是如何实现Lambda表达式的呢? Lambda表达式经过编译之后,到底会生成什么东西呢 ...

  9. Lambda 表达式详解~Lambda与集合

    我们先从最熟悉的*Java集合框架(Java Collections Framework, JCF)*开始说起. 为引入Lambda表达式,Java8新增了java.util.funcion包,里面包 ...

  10. Java 8 golang 1.8_Java8 新特性(一) - Lambda

    Java8 新特性(一) - Lambda 近些日子一直在使用和研究 golang,很长时间没有关心 java 相关的知识,前些天看到 java9 已经正式发布,意识到自己的 java 知识已经落后很 ...

最新文章

  1. JavaEE——JavaScript
  2. 面对对象的程序设计初探总结
  3. linux下db2创建批量存储过程,DB2批量执行SQL脚本以及存储过程的实现
  4. 《Two Days DIV + CSS》读书笔记——CSS选择器
  5. 计算机专业学教育技术优势,西南交通大学教育技术学(040110)专业介绍
  6. 写java代码时的注意事项_从方法返回Java 8的可选项时的注意事项
  7. Python html 代码转成 word(docx)
  8. mask层--- ios开发view圆角属性的layer层的实质
  9. 零基础带你学习MySQL—Select语句以及注意事项(十)
  10. 卓越、当当、京东三大广告联盟比较
  11. layout components pages及基本操作
  12. 百度网盘IDM快速下载
  13. redis 复制功能测试(转阿辉的百度空间)
  14. OCR通用文字识别接口
  15. 估计的商是什么意思_商_商是什么意思_商字怎么读_商的含义_商字组词-新东方在线字典...
  16. vue显示PDF文件
  17. Tesseract怎么识别中文
  18. ArcGIS栅格按照象元大小生成矢量的方法
  19. 中国超级计算机首次跻身全球五强
  20. 燕秀计算机打印区域文字高度,CAD 让文字显示在指定区域,自动根据文字内容调整文字高度...

热门文章

  1. 【一周一算法】算法2:邻居好说话——冒泡排序
  2. C# 使用printDocument1.Print打印时不显示 正在打印对话框(里面还有一个讨厌的取消按钮)...
  3. Win32-Application的窗口和对话框
  4. CCF 201312-4 有趣的数
  5. Java第五次作业--面向对象高级特性(抽象类和接口)
  6. window8下安装RabbitMQ
  7. C Primer Plus 第7章 C控制语句:分支和跳转 7.4 一个统计字数的程序
  8. iOS开发--验证码
  9. CAS实现单点登录方案(SSO完整版)
  10. android js调试