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 方法引用的更多相关文章

  1. JAVA 8 主要新特性 ----------------(五)Lambda方法引用与构造器引用

    一.Lambda方法引用 当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!(实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致!) 方法引用: 使用操作符 “::” 将 ...

  2. java8 lambda方法引用

    注意引用方法的参数列表与返回值类型要与函数式接口中的抽象方法的参数列表与返回值类型保持一致 主要有三种语法格式: * * 对象::实例方法名 * * 类::静态方法名 * * 类::实例方法名 pub ...

  3. Java自学-Lambda 方法引用

    Lambda 方法引用 步骤 1 : 引用静态方法 首先为TestLambda添加一个静态方法: public static boolean testHero(Hero h) { return h.h ...

  4. Lambda语言篇 —— lambda, 方法引用, 目标类型和默认方法

    本文介绍了Java SE 8中新引入的lambda语言特性以及这些特性背后的设计思想.这些特性包括: lambda表达式(又被成为"闭包"或"匿名方法") 方法 ...

  5. Java8新特性 -- Lambda 方法引用和构造器引用

    一. 方法引用: 若Lambda体中的内容有方法已经实现了,我们可以使用“方法引用” 要求 方法的参数和返回值类型 和 函数式接口中的参数类型和返回值类型保持一致. 主要有三种语法格式: 对象 :: ...

  6. 第九章 Lambda&方法引用

    9.1.Lambda表达式 9.1.1.标准格式 (形式参数) -> {代码块} 9.1.2.使用前提 有一个接口并且接口中有且仅有一个抽象方法 9.1.3.常见应用 9.1.3.1.无参无返回 ...

  7. Lambda 方法引用 构造器引用 数组引用

    一.方法引用 注意: 1.Lambda 体中调用方法的参数列表与返回值类型,要与函数式接口中的抽象方法的函数列表和返回值保持一致!2.若Lambda 参数列表中的第一个参数是实例方法的调用者,而第二个 ...

  8. Java笔记——Java8特性之Lambda、方法引用和Streams

    Java8已经推出了好一段时间了,而掌握Java8的新特性也是必要的,如果要进行Spring开发,那么可以发现Spring的官网已经全部使用Java8来编写示例代码了,所以,不学就看不懂. 这里涉及三 ...

  9. Java8特性之Lambda、方法引用和Streams

    这里涉及三个重要特性: Lambda 方法引用 Streams ① Lambda 最早了解Lambda是在C#中,而从Java8开始,Lambda也成为了新的特性,而这个新的特性的目的,就是为了消除单 ...

随机推荐

  1. 《C程序设计语言》练习 1-6,1-7

    #include<stdio.h> /*验证表达式getchar()!=EOF的值是0还是1*/ main () { int c; c=getchar()!=EOF; printf(&qu ...

  2. Django学习之模型层

    模型层 查看orm内部sql语句的方法的方法 1.如果是queryset对象,那么可以点query直接查看该queryset的内部sql语句 2.在Django项目的配置文件中,配置一下参数即可实现所 ...

  3. KVC解析

    •  阅读  valueForKey (总体规划,先找相关方法,再找相关变量) 1.先是找相关方法,如果方法找不到 2.那么去判断 1 2 3 + (BOOL)accessInstanceVariab ...

  4. mysql中in和exist的区别

    mysql中in和exists的区别 -- in写法select * from A where A.id in (select bid from  B ) and A.name in (select ...

  5. FP-Grow树

    序言 FP-growth(Frequent Pattern Tree, 频繁模式树),是韩家炜老师提出的挖掘频繁项集的方法,是将数据集存储在一个特定的称作FP树的结构之后发现频繁项集或频繁项对,即常在 ...

  6. 基于Python的Flask基础知识

    Flask简介 Flask 是一个使用 Python 编写的轻量级 Web 应用程序框架.Armin Ronacher带领一个名为Pocco的国际Python爱好者团队开发了Flask. 下面我们简单 ...

  7. maven命令-P 参数引发的思考

    参考文档: https://blog.csdn.net/haiyuntai/article/details/53260191 谢谢原作者 maven 命令:clean package -Dmaven. ...

  8. Nginx笔记总结二十一:隐藏或者混淆nginx返回的Server信息

    [root@localhost nginx-]# vi src/http/ngx_http_header_filter_module.c 修改:49-50行 static char ngx_http_ ...

  9. python3多进程爬虫(第一卷)

    进程这个东西概念很多人很模糊,而多进程并发爬虫也算是爬虫几大难点,现在我先说下进程的基本使用: 开启一个python文件 函数sayhi就是一个进程而且是主进程 现在呢我想循环输出NAME,n 正常我 ...

  10. 剑指CopyOnWriteArrayList

    上期回顾 之前的一篇 剑指ConcurrentHashMap[基于JDK1.8] 给大家详细分析了一波JUC的ConcurrentHashMap,它在线程安全的基础上提供了更好的写并发能力.那么既然有 ...