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也成为了新的特性,而这个新的特性的目的,就是为了消除单 ...
随机推荐
- pandas常用小trick(持续更新)
记录一下pandas常用的小技巧,时间长了干别的去了会忘记,记录一下: 1. 在处理数据过程中涉及到label和null的处理方法 # 方法一 df['height'][df.height < ...
- Elasticsearch Rest模式和RPC模式性能比较
Elasticsearch 有两种链接模式,即Rest方式(对应端口9200)和RPC方式(对应端口9300)这两种访问效率到底差多少,在同样的业务逻辑下,测试了一波. 用的JMeter进行压力测试 ...
- iOS传感器集锦、飞机大战、开发调试工具、强制更新、Swift仿QQ空间头部等源码
iOS精选源码 飞机大作战 MUPhotoPreview -简单易用的图片浏览器 LLDebugTool是一款针对开发者和测试者的调试工具,它可以帮... 多个UIScrollView.UITable ...
- OpenCV、EmguCV函数注解
- 数据结构与算法 python课后题(未完成)
挖一个坑,先立个flag,后面慢慢填坑. 先放个其它人写的链接
- numpy中的ndarray与pandas中的series、dataframe的转换
一个ndarray是一个多维同类数据容器.每一个数组有一个dtype属性,用来描述数组的数据类型. Series是一种一维数组型对象,包含了一个值序列,并且包含了数据标签----索引(index). ...
- 每个月执行一次任务,保存90天的mongo日志数据
用mongo 的dump 和 restore实现 shell版 #!/bin/bash mongodump --host -d lewifi -c auditOrigData -q {}} -o ~/ ...
- 吴裕雄--python学习笔记:sqlite3 模块
1 sqlite3.connect(database [,timeout ,other optional arguments]) 该 API 打开一个到 SQLite 数据库文件 database 的 ...
- 将js进行到底:node学习5
HTTP开发之Connect工具集--中间件 继学习node.js的TCP API和HTTP API之后,node.js web开发进入了正轨,但这就好像Java的servlet一样,我们不可能使用最 ...
- scatter散点图
import matplotlib.pyplot as plt import numpy as np n = 1024 X = np.random.normal(0,1,n) Y = np.rando ...