Lambda 方法引用
1.方法引用:若Lambda 体中的内容有方法已经实现了,我们可以使用“引用方法”(可以理解为方法引用是Lambda表达式的另外一种表现形式)
方法引用主要有三种语法格式:
① 对象 :: 实例方法名
② 类 :: 静态方法名
③ 类 :: 实例方法名
实例说明
//对象 :: 实例方法名
@Test
public void test1(){
//Lambda表达式
Consumer<String> con = (x) -> System.out.println(x);
con.accept("hello Lambda"); //方法引用
PrintStream ps = System.out;
Consumer<String> con1 = ps :: println;
con1.accept("hello Lambda1"); //简化一步为
Consumer<String> con2 = System.out :: println;
con1.accept("hello Lambda2");
} //对象 :: 实例方法名
@Test
public void test2() {
Employee emp = new Employee("张三", 18, 8888.88); //Lambda
Supplier<String> sup = () -> emp.getName();
String str = sup.get();
System.out.println(str); //方法引用
Supplier<Integer> sup2 = emp :: getAge;
int age = sup2.get();
System.out.println(age); } //类 :: 静态方法名
@Test
public void test3(){ //Lambda
Comparator<Integer> com = (x, y) -> Integer.compare(x, y);
int res = com.compare(2, 0);
System.out.println(res); //方法引用
Comparator<Integer> com2 = Integer :: compare;
int res2 = com2.compare(1, 3);
System.out.println(res2);
} //类 :: 实例方法名
@Test
public void test4(){ //Lambda
BiPredicate<String, String> bp = (x, y) -> x.equals(y);
boolean flag = bp.test("hello", "hello");
System.out.println(flag); //方法引用
BiPredicate<String, String> bp2 = String :: equals;
boolean flag2 = bp2.test("hello", "world");
System.out.println(flag2);
}
注意:
① Lambda 体中调用方法的参数列表与返回值类型,要与函数式接口抽象方法的函数列表和返回值类型保持一致!
② Lambda 参数列表中的第一参数是实例方法的调用者,而第二个参数是实例方法的参数时,可以使用ClassName :: Method
2.构造器引用
构造器引用语法格式:
ClassName :: new
实例说明
//构造器引用 ClassName :: new
@Test
public void test5(){
//Lambda 无参数构造方法
Supplier<Employee> sup = () -> new Employee();
Employee employee = sup.get(); //构造器引用
Supplier<Employee> sup2 = Employee :: new;
Employee employee2 = sup2.get(); //有一个参数构造方法
Function<String, Employee> fun = (x) -> new Employee(x);
Employee emp1 = fun.apply("张三"); Function<String, Employee> fun2 = Employee :: new;
Employee emp2 = fun2.apply("张三"); //两个参数的构造方法
BiFunction<String, Integer, Employee> bf = (x, y) -> new Employee(x, y);
Employee emp3 = bf.apply("李四", 18); BiFunction<String, Integer, Employee> bf2 = Employee :: new;
Employee emp4 = bf.apply("李四", 18);
System.out.println(emp4.getName());
}
注意:需要调用的构造器的参数列表要与函数式接口中的抽象方法的参数列表保持一致!
3.数组引用
数组引用语法格式:
Type[] :: new;
实例说明
//数组引用 Type[] :: new;
@Test
public void test6() {
Function<Integer, String[]> fu = (x) -> new String[x];
String[] strs = fu.apply(10);
System.out.println(strs.length); Function<Integer, String[]> fu2 = String[] :: new;
String[] strs2 = fu2.apply(8);
System.out.println(strs2.length);
}
Employee类
public class Employee {
private String name;
private int age;
private double salary;
public Employee() {
}
public Employee(String name) {
this.name = name;
}
public Employee(String name, int age) {
this.name = name;
this.age = age;
}
public Employee(String name, int age, double salary) {
super();
this.name = name;
this.age = age;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
Lambda 方法引用的更多相关文章
- JAVA 8 主要新特性 ----------------(五)Lambda方法引用与构造器引用
一.Lambda方法引用 当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!(实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致!) 方法引用: 使用操作符 “::” 将 ...
- java8 lambda方法引用
注意引用方法的参数列表与返回值类型要与函数式接口中的抽象方法的参数列表与返回值类型保持一致 主要有三种语法格式: * * 对象::实例方法名 * * 类::静态方法名 * * 类::实例方法名 pub ...
- Java自学-Lambda 方法引用
Lambda 方法引用 步骤 1 : 引用静态方法 首先为TestLambda添加一个静态方法: public static boolean testHero(Hero h) { return h.h ...
- Lambda语言篇 —— lambda, 方法引用, 目标类型和默认方法
本文介绍了Java SE 8中新引入的lambda语言特性以及这些特性背后的设计思想.这些特性包括: lambda表达式(又被成为"闭包"或"匿名方法") 方法 ...
- Java8新特性 -- Lambda 方法引用和构造器引用
一. 方法引用: 若Lambda体中的内容有方法已经实现了,我们可以使用“方法引用” 要求 方法的参数和返回值类型 和 函数式接口中的参数类型和返回值类型保持一致. 主要有三种语法格式: 对象 :: ...
- 第九章 Lambda&方法引用
9.1.Lambda表达式 9.1.1.标准格式 (形式参数) -> {代码块} 9.1.2.使用前提 有一个接口并且接口中有且仅有一个抽象方法 9.1.3.常见应用 9.1.3.1.无参无返回 ...
- Lambda 方法引用 构造器引用 数组引用
一.方法引用 注意: 1.Lambda 体中调用方法的参数列表与返回值类型,要与函数式接口中的抽象方法的函数列表和返回值保持一致!2.若Lambda 参数列表中的第一个参数是实例方法的调用者,而第二个 ...
- Java笔记——Java8特性之Lambda、方法引用和Streams
Java8已经推出了好一段时间了,而掌握Java8的新特性也是必要的,如果要进行Spring开发,那么可以发现Spring的官网已经全部使用Java8来编写示例代码了,所以,不学就看不懂. 这里涉及三 ...
- Java8特性之Lambda、方法引用和Streams
这里涉及三个重要特性: Lambda 方法引用 Streams ① Lambda 最早了解Lambda是在C#中,而从Java8开始,Lambda也成为了新的特性,而这个新的特性的目的,就是为了消除单 ...
随机推荐
- Idea mac
Idea 的破解 http://idea.lanyus.com/ Idea 的常用配置 模版及模版的使用 创建 JavaWeb 或 Module 关联数据库 版本控制 断点调试 配置 maven 其他 ...
- JS如何按时间粒度获取date的时间差
获取date类型 var type = _xAxis[0].split(/-|:|\s/).length; 按时间粒度获取date的时间差 function getDateDiffByType(new ...
- Java中Date类型详解
一.Date类型的初始化 1. Date(int year, int month, int date); 直接写入年份是得不到正确的结果的. 因为java中Date是从1900年开始算的,所以前面的第 ...
- UITextView实现PlaceHolder的方式
实现UITextView实现PlaceHolder的方式的方式有两种,这两种方法的核心就是通过通知来添加和去除PlaceHolder:下面来介绍两种方法:个人比较喜欢第一种,看起来更加合理. 方法1: ...
- Linux_实验1 Red Hat的使用
目录 使用rjxy用户登录图形界面 由当前控制台切换到tty4虚拟控制台: 由当前用户切换到root用户: 用root用户查看当前运行级别,并把当前运行级别切换到3级,再切换到5级运行级别: 用“ge ...
- MOOC(15)- 接口异常处理
首先通过fiddler拿到正确的传参 把value复制下来,存到json数据中,传参时通过键去json的值即可 但是运行请求的时候报错了 再运行,还是出错 查看fiddler结果 修改,从fiddle ...
- Java中的Properties类
目录 Java中的Properties类 前言 主要方法 读取Properties文件 相关实例 Java中的Properties类 前言 Java中的Properties类属于配置文件,以键值对的方 ...
- [LC] 257. Binary Tree Paths
Given a binary tree, return all root-to-leaf paths. Note: A leaf is a node with no children. Example ...
- windows下的tfjs-node安装异常总结
大约有半年没有写博客了,奔波于上海这座魔都之中.险些忘了自己是个有梦想的全栈工程师 书接上回,由于个人非常厌恶python的语法,半年前发现了tensorflow.js这个宝贝(下简称tfjs),喜出 ...
- 吴裕雄--天生自然 R语言开发学习:高级数据管理
#-----------------------------------# # R in Action (2nd ed): Chapter 5 # # Advanced data management ...