JDK 8 - Method Reference 分析
- java.util.stream 使得我们可以将 collection 视作 stream。stream 不是 data structure,不存储数据,它仅仅向我们提供了 collection 的另外一种视角 ( view )。我们可以通过一系列的 aggregate operations 构成的 pipeline 操作 stream 。
- method reference 可以在 lambda expression 出现的地方使用,代替 lambda expression,据官方说明这样更清晰易懂。
- functional interface 是只含有一个 abstract method 的 interface ( 可以包含 default method,static method。注意:定义了 Object 中同名的方法不算 abstract method ) 。JDK 8 中新增了很多通用的 functional interface,可以用 lambda expression 实现。
|
Kind
|
Example
|
|
Reference to a static method
|
ContainingClass::staticMethodName
|
|
Reference to an instance method of a particular object
|
containingObject::instanceMethodName
|
|
Reference to an instance method of an arbitrary object of a particular type
|
ContainingType::methodName
|
|
Reference to a constructor
|
ClassName::new
|
class ComparisonProvider {
public int compareByName(Person a, Person b) {
return a.getName().compareTo(b.getName());
}
public int compareByAge(Person a, Person b) {
return a.getBirthday().compareTo(b.getBirthday());
}
}
ComparisonProvider myComparisonProvider = new ComparisonProvider();
Arrays.sort(rosterAsArray, myComparisonProvider::compareByName);
compareByName 将传进来的两个参数全部作为参数。
String[] stringArray = { "Barbara", "James", "Mary", "John",
"Patricia", "Robert", "Michael", "Linda" };
Arrays.sort(stringArray, String::compareToIgnoreCase);
compareToIgnoreCase 的调用者是传进来的第一个参数。
第三种方式有点费解,个人认为不如用 lambda expression 来得简洁易懂、不易出错。
参考资料:
https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html。
JDK 8 - Method Reference 分析的更多相关文章
- 方法引用(Method reference)和invokedynamic指令详细分析
方法引用(Method reference)和invokedynamic指令详细分析 invokedynamic是jvm指令集里面最复杂的一条.本文将详细分析invokedynamic指令是如何实现方 ...
- 深入理解JDK中的Reference原理和源码实现
前提 这篇文章主要基于JDK11的源码和最近翻看的<深入理解Java虚拟机-2nd>一书的部分内容,对JDK11中的Reference(引用)做一些总结.值得注意的是,通过笔者对比一下JD ...
- 浅析Java 8新特性Method Reference
什么是方法引用 我们知道了什么是Lambda Expression以及如何使用,那么,Method References又是什么呢?Oracle Java Docs中这样说: They are com ...
- JDK Collection 源码分析(2)—— List
JDK List源码分析 List接口定义了有序集合(序列).在Collection的基础上,增加了可以通过下标索引访问,以及线性查找等功能. 整体类结构 1.AbstractList 该类作为L ...
- java中的方法引用(method reference)官方文档总结
2017/7/5 转载写明出处:http://www.cnblogs.com/daren-lin/p/java-method-reference.html 今天要说的是java中的一项新特性,方法引用 ...
- JDK AtomicInteger 源码分析
@(JDK)[AtomicInteger] JDK AtomicInteger 源码分析 Unsafe 实例化 Unsafe在创建实例的时候,不能仅仅通过new Unsafe()或者Unsafe.ge ...
- method reference
import java.util.Arrays; import java.util.List; import java.util.function.Function; import java.util ...
- 方法引用(method reference)
目录 方法引用(method reference) 1. 含义 2. 分类 3. 总结 方法引用(method reference) 1. 含义 方法引用实际上是 Lambda 表达式的一种语法糖. ...
- Java中的函数式编程(四)方法引用method reference
写在前面 我们已经知道,lambda表达式是一个匿名函数,可以用lambda表达式来实现一个函数式接口. 很自然的,我们会想到类的方法也是函数,本质上和lambda表达式是一样的,那是否也可以用类 ...
随机推荐
- eureka-8-Eureka 的健康检查
eureka.client.healthcheck.enabled:true 应用程序将自己的健康状态传播到Eureka Server
- 利用国内镜像下载Android源码,并编译生成image镜像文件
为了编译安卓源码,首先需要一个Linux,本次采用Ubuntu Kylin14.04,内核版本3.13.装在四核.4G内存.1T硬盘的虚拟机上查看内核版本号:$uname -all清华镜像地址清华镜像 ...
- Mac环境下svn的使用(转)
本文目录 一.创建代码仓库,用来存储客户端所上传的代码 二.配置svn的用户权限 三.使用svn客户端功能 在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下, ...
- 安装Spring报错An error occurred while collecting items to be installed
原因主要是eclipse和spring版本之间的匹配问题. An error occurred while collecting items to be installed session conte ...
- Java API访问ZK的权限控制
无权限访问结点 /** * 对于ZK的授权访问 * Created by liuhuichao on 2017/7/27. */ public class AutoSample { private s ...
- 几种常见的微服务架构方案——ZeroC IceGrid、Spring Cloud、基于消息队列、Docker Swarm
微服务架构是当前很热门的一个概念,它不是凭空产生的,是技术发展的必然结果.虽然微服务架构没有公认的技术标准和规范草案,但业界已经有一些很有影响力的开源微服务架构平台,架构师可以根据公司的技术实力并结合 ...
- Redis的集群安装以及rehash重新迁移教程指南
1. Redis的cluster集群 在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子.最核心的目标有三个: 性能:这是Redis赖以生存的看家本领,增加集群 ...
- dhcp snooping、ARP防护、
应用场景 无线客户端流动性很大和不确定,比如在外来人员比较多的地方:广场.大厅.会议室和接待室等等.使用该方案可以有效地避免因为无线端出现私设IP地址导致地址冲突或者客户端中ARP病毒发起ARP攻击的 ...
- Linux RTC Test Example rtctest.c hacking
/********************************************************************** * Linux RTC Test Example rtc ...
- css工具类封装
温馨提示:一下css封装,建议按需使用,否则会造成很大的代码冗余,且很多样式会造成不符合预期的效果,建议合理使用 <a href="https://meyerweb.com/eric/ ...