在上一篇【http://www.cnblogs.com/webor2006/p/7707281.html】中提到了方法推导的东东:

这里说细的学习一下它,下面走起!

Method references【方法推导】:

编译运行:

而对于上面的代码可以用Lambda更加精简:

不多解释,然后对于上面的代码还能进一步精简,这时就得用到Lambda的方法推导啦,如下:

可以打一下println()的方法源码:

而方法推导的使用方式就是类后面加两个":",再跟上要调用的方法名。

其实在JAVA8 IN ACTION中就有一节专门介绍方法推断的,其中描述了在下列三种情况下可以改用方法推断,如下:

1. A method reference to a static method (for example, the method parseInt of Integer, written Integer::parseInt) 

上面已经说明了这种情况,比如Integer.parseInf()方法是静态的,平常我们也大量会使用到它,这时它就可以用方法推荐的方式编写,具体如下:

2. A method reference to an instance method of an arbitrary type (for example, the method length of a String, written String::length) 

一个对象的方法也可以用推导,如描述中所举例的String对象的length方法,这里用它的另外一个方法来举例,charAt:

其结果输出是一样的:

【注】:这里是用的String::charAt,也就是用的String的类,而非类的实例,它跟第三点有点不一样。

3. A method reference to an instance method of an existing object (for example, suppose you have a local variable expensiveTransaction that holds an object of type Transaction, which supports an instance method getValue; you can write expensiveTransaction::getValue) 

还是以上面String的charAt为例,以实例的方式如下:

Constructor references【构造函数方法推导】:

在上节中提到的String::new的推导也就是属于这种,也就是对像的实例可以用推导的方式来写,再来复习下:

上面这个是调用无参的构造函数,但如果存在二个构造参数如何用推导的方式呢,这里还是以之前咱们写的Apple为例:

那如果构造存在三个参数怎么办呢?系统的Function貌似也就最多支持二个输入参,这时咱们可以自己手写Function,这里先来定义一个三个参数的Apple实体:

这时定义咱们自己的Function,如下:

接着来实例化三个参数的Apple如下:

下面再来看另外一个例子:

编译运行:

其实对于数组的排序还有另外一种更加简便的写法,其中也涉及到了方法的推导,如下:

查看一下Comparator.comparing()的源码理解一下它的原理:

而传的Apple::getColor返回的:

所以keyExtractor.apply(c1=Apple)就刚好返回的是c1的color,所以上面可以等于(c1, c2) -> c1.color.compareTo(c2.color),其实也就是等价于这种方式:

对于这个源码有个大概的印象,以便可以知其所有然。

对于对集合进行排序可以把目前的三种写法列出来直观感受一下:

是不是推出的新的写法就是为了让代码更加的精简呢~~至此对于Java8的Lambda表达式相关的东东就学得差不多了,需好好消化。

转载于:https://www.cnblogs.com/webor2006/p/7758006.html

Lambda方法推导(method references)相关推荐

  1. java 方法引用_JAVA 8 方法引用 - Method References

    什么是方法引用 简单地说,就是一个Lambda表达式.在Java 8中,我们会使用Lambda表达式创建匿名方法,但是有时候,我们的Lambda表达式可能仅仅调用一个已存在的方法,而不做任何其它事,对 ...

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

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

  3. java 8 方法引用(method references)

    1 什么是方法引用(method references) java 8 添加了一个很熟悉但是又很陌生的符号::. 你也许会看到这样的代码 System.out::println 其实就是方法引用(me ...

  4. 方法超出 android,Android工程方法数超过64k,The number of method references in a .dex file cannot exceed 64K....

    最近将一个老的Eclipse项目转到Android Studio后,用gradle添加了几个依赖,项目可以make,但是一旦run就报错 Error:The number of method refe ...

  5. ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)

    在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...

  6. AndroidStudio:The number of method references in a .dex file cannot exceed 64K错误

    在AndroidStudio中出现下面的错误提示: Error:The number of method references in a .dex file cannot exceed 64K. Le ...

  7. Android studio: The number of method references in a .dex file cannot exceed 64K. Learn how to resol

    报错log: Error:The number of method references in a .dex file cannot exceed 64K. Learn how to resolve ...

  8. The number of method references in a .dex file cannot exceed 64K. Error 解决方案

    我们都知道app里面的方法数是有限制的差不多64000个,具体就为曾考证了 在遇到这个问题之前,一直以为这是一件多么遥远的事情,其实并不是的,稍有不慎这个异常出来了 也有可能并不是你真的有编写了64k ...

  9. APS.NET_MVC5学习笔记-验证编辑方法(Edit method)和编辑视图(Edit view)

    在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图.但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好.打开Models \ Movie ...

最新文章

  1. MySQL · 引擎特性 · InnoDB COUNT(*) 优化(?)
  2. 数据结构数组计算机中的应用,2018考研计算机:数据结构数组和广义表复习重点...
  3. leetcode414. 第三大的数
  4. 《linux c编程指南》学习手记2
  5. JavaScript的==和Java的==比较
  6. SCADA数采HAAS数控系统现场实操步骤
  7. 日记侠:原来写文章竟然是为了这个
  8. 通信芯片sx1278-基于LORA SX1278无线模块的STM32点对点通信简单实现
  9. idea2020.1.1 窗口显示 Outdated version. 完美解决
  10. SAP FI月结 坏账转移及计提准备 Doubtful Receivables Bad Debts
  11. js + jquery 两栏Tab鼠标移入显示/隐藏的效果(详)
  12. google浏览器调试工具自定义网速设置网速
  13. 微信小程序 -- 语音合成:将文字转为语音(插件:微信同声传译)
  14. computed,watch
  15. c语言学生成员管理代码报告怎么写,C语言学生通信录管理系统课程设计报告
  16. .mkv格式的视频播放不了?看这里_
  17. 如何使用激活工具Microsoft Toolkit
  18. 《程序原本-追溯程序原本之书》读书笔记
  19. C语言100题打卡—第7题
  20. final变量存在哪 java_使用Java中的final变量需要注意的地方。

热门文章

  1. 浏览器加载本地html页面,在浏览器字段中加载本地HTML文件时是否显示白屏?
  2. android注入 定位,[原创]修改源码实现全局(无需root)注入躲开注入检测
  3. php连接基础方法怎么查询数据库,php基础之连接mysql数据库和查询数据
  4. lin通讯从节点同步间隔场_低成本总线技术——LIN总线协议规范介绍
  5. php中的interface和implements及其他
  6. 做了6年的Java,java视频教程传智播客
  7. java线程池有哪几种,真香系列
  8. 【深度学习】DIY 人脸识别技术的探索(一)
  9. 【深度学习入门到精通系列】对抗样本和对抗网络
  10. Java的this和super关键字详解