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也成为了新的特性,而这个新的特性的目的,就是为了消除单 ...
随机推荐
- java replaceall 用法:处理特殊字符
public class TryDotRegEx { public static void main(String[] args) { // TODO Auto-generated method st ...
- 实战_1:在Eclipse中新建RCP项目
(1)file => New => Plug-in Project (2) 指定项目名称 => next source folder: 源码路径 Output folder:编译后 ...
- http接口与webservice接口的区别
常见的API接口有两类:http接口和webservice接口. http接口走http协议,通过路径来区分调用方法,请求报文一般是key-value形式的,返回报文一般是json串,常用的是get和 ...
- sqlite基础API
/* 打开/创建数据库文件 * 如果数据库文件不存在就创建数据库文件. * 数据库操作句柄保存在第二个参数中. * 第一个参数:文件路径及其文件名 * 第二个参数:sqlite3操作句柄 * 返回值: ...
- 企业框架-Spring
1.什么是Spring Spring是最受欢迎的企业级Java应用程序开发框架,数以百万的来自世界各地的开发人员使用Spring框架来创建性能好.易于测试.可重用的代码. Spring框架是一个开源的 ...
- 科研伴我成长——上海交通大学ACM班学生在微软亚洲研究院的幸福实习生活
每一年,微软亚洲研究院都会迎来一批"特殊的"实习生--他们既不是从五湖四海汇聚而来,也不是在读的硕士和博士.他们相识已久,知道对方的小秘密.小八卦,也相互敬佩.惺惺相惜--他们就是 ...
- 通过银行卡的Bin号来获取银行名称
/** * 通过银行的Bin号 来获取 银行名称 * @author 一介草民 * */ public class BankUtil { public static void main(String[ ...
- Ionic3学习笔记(十六)上传头像至图床
本文为原创文章,转载请标明出处 个人做的开源 Demo 登录注册模块采用的是 Wilddog 野狗通讯云的身份认证服务,不得不说各方面和 Google 收购的 Firebase 很像,十分简单易用.其 ...
- [资讯]同济D&I出品 | 绝对是史上最萌的机器人教具!!!
机器人小曼……" 3D打印.激光切割等先进工艺. Anibot中包含三种不同的动物形象:小鸡安妮.小鹿安娜.猫头鹰安迪.孩子们通过对各个元器件的学习及编程确保它们幸福成长在阳光氤氲的森林 ...
- 設定MacOS 終端機環境 (Homebrew/zsh/oh-my-zsh/iTerm2)
安裝Homebrew 1 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/in ...