Java8 方法引用与构造器引用,数组引用
package java_8; import org.junit.Test; import java.io.PrintStream;
import java.util.Comparator;
import java.util.function.*;
import java.util.function.Function; /**
* 方法引用:若Lambda体中的内容有方法已经实现了,那么我们可以使用"方法引用"
* (可以理解为方法引用时Lambda表达式的另外一种表现形式
*
* 主要有三种语法格式:
*
* 对象::实例方法名
*
* 类::静态方法名
*
* 类::实例方法名
*
* 注意:
* 1. Lambda体中调用方法的参数列表与返回值类型,要与函数式接口中抽象方法的函数列表和返回值类型保存一致
* 2.若Lambda参数列表中的第一个参数是实例方法的调用者,而第二个参数是实例方法的参数时,可以使用ClassName::method
*
* 二、构造器引用
* 格式:
* ClassName::new
* 注意:需要调用的构造器方法与函数式接口中抽象方法的参数列表保持一致
*
* 三、数组引用
* Type::new;
*/
public class TestMethodRef { //数组引用:
@Test
public void test7(){
Function<Integer, String[]> fun = x -> new String[x];
String[] strs = fun.apply(10);
System.out.println(strs.length); Function<Integer,String[]> fun1 = String[]::new;
strs = fun1.apply(20);
System.out.println(strs.length);
} //构造器引用
@Test
public void test5(){
Supplier<Employee> sup = ()-> new Employee();
Employee emp = sup.get(); //构造器引用
//根据参数列表自动匹配构造器
Supplier<Employee> sup2 = Employee::new;
emp = sup2.get();
System.out.println(emp);
} @Test
public void test6(){
Function<Integer,Employee> func = x -> new Employee(x);
Employee emp = func.apply(10);
System.out.println(emp); Function<Integer,Employee> func1 = Employee :: new;
emp = func1.apply(10);
System.out.println(emp); // BiFunction<Integer, Integer, Employee> bf = Employee::new;编译错误,没有两个Integer构造器
} //对象::实例方法名
@Test
public void test1(){
Consumer<String> con = x -> System.out.println(x);
PrintStream ps = System.out; //打印流
//前提条件: Consumer中的方法体参数与返回值要与ps.println方法中的参数和返回值类型相同
//Consumer: void accept(T t);在这里T为String
//PrintStream: public void println(String x)
//两者传入的参数都为String,返回值都为void所以满足,可以使用方法引用
Consumer<String> con1 = ps::println; Consumer<String> con2 = System.out::println;//这三种方式结果相同 con.accept("huang");
con1.accept("huang");
con2.accept("huang");
} @Test
public void test2(){
Employee emp = new Employee();
Supplier<String> sup = () -> emp.getName();
Supplier<String> sup2 = emp::getName; } //--------------------------------------- //类::静态方法名
@Test
public void test3(){
Comparator<Integer> com = (x, y) ->Integer.compare(x, y);
//前提条件:和上面相同
Comparator<Integer> com1 = Integer::compare;
} //类::实例方法名
@Test
public void test4(){
BiPredicate<String, String> bp = (x, y) -> x.equals(y);
boolean bool = bp.test(new String("huang"),"huang");
System.out.println(bool); //前提:第一个参数是实例方法的调用者,第二个参数是实例方法的参数
//例如 x 是equal方法的调用者,y是实例方法的参数
BiPredicate<String,String> bp2 = String::equals;
bool = bp2.test("huang","huang");
System.out.println(bool);
} }
package java_8;
public class Employee {
private int id;
private String name;
private int age;
private double salary;
public Employee() {
}
public Employee(int id){
this.id = id;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", salary=" + salary +
'}';
}
public Employee(String name, int age, double salary) {
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;
}
}
Java8 方法引用与构造器引用,数组引用的更多相关文章
- java8新特性——方法引用与构造器引用
上篇文章简单学习了java8内置得4大核心函数式接口,这类接口可以解决我们遇到得大多数得业务场景得问题.今天来简单学习一下方法引用与构造器引用. 一.方法引用 方法引用:若lambda 体中得内容已经 ...
- Java8新特性 -- Lambda 方法引用和构造器引用
一. 方法引用: 若Lambda体中的内容有方法已经实现了,我们可以使用“方法引用” 要求 方法的参数和返回值类型 和 函数式接口中的参数类型和返回值类型保持一致. 主要有三种语法格式: 对象 :: ...
- Java8新特性 - 方法引用与构造器引用
方法引用 若Lambda体中的内容有方法已经实现了,我们可以使用"方法应用",可以理解为方法引用是Lambda表达式的另外一种表现形式. 使用操作符"::"将方 ...
- Lambda 方法引用 构造器引用 数组引用
一.方法引用 注意: 1.Lambda 体中调用方法的参数列表与返回值类型,要与函数式接口中的抽象方法的函数列表和返回值保持一致!2.若Lambda 参数列表中的第一个参数是实例方法的调用者,而第二个 ...
- JDK8新特性04 方法引用与构造器引用
import java.io.PrintStream; import java.util.Comparator; import java.util.function.*; /** * 一.方法引用 * ...
- JAVA 8 主要新特性 ----------------(五)Lambda方法引用与构造器引用
一.Lambda方法引用 当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!(实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致!) 方法引用: 使用操作符 “::” 将 ...
- JAVA8方法引用
方法引用:若Lambda方法体已经实现,我们可以使用方法引用* 主要有三种语法格式:* 对象::实例方法名* 类::实例方法名* 类::静态方法名** 注意:Lambda体中调用的方法的参数列表与返回 ...
- JDK8--05:方法引用和构造器引用
在上一篇文章中,说过JDK8中内置的函数时接口,为了方便使用,JDK8还提供了方法引用和构造器引用,来简化lambda的写法 1.方法引用 方法引用说明:lambda表达式中的方法已经在其他方法中已经 ...
- java 基本语法(十七)Lambda (四)构造器引用与数组引用
1.构造器引用格式:类名::new 2.构造器引用使用要求:和方法引用类似,函数式接口的抽象方法的形参列表和构造器的形参列表一致.抽象方法的返回值类型即为构造器所属的类的类型 3.构造器引用举例: / ...
随机推荐
- iOS 判断是否有权限访问相机,相册
1.判断用户是否有权限访问相册 #import <AssetsLibrary/AssetsLibrary.h> ALAuthorizationStatus author =[ALAsset ...
- linux的chmod,chown命令 详解
指令名称 : chmod 使用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... 说明 : Linux/Unix 的档案 ...
- C++快速读取大文件
debug的时候需要等很长时间读模型,查资料发现了两种快速读取大文件的方法. test 1:每次读一个字符串 test 2.3一次读取整个文件 {//test 1 string buf; clock_ ...
- activity_note
在activiti任务中,主要分为两大类查询任务(个人任务和组任务): 1.确切指定了办理者的任务,这个任务将成为指定者的私有任务,即个人任务. 2.无法指定具体的某一个人来办理的任务,可以把任务分配 ...
- Core Graphics框架 利用Quartz 2D绘图
首先,什么是Core Graphics和Quartz 2D? Core Graphics:是基于Quartz 2D绘图引擎的一个C语言的API绘图框架.它也是iOS开发中最基本的框架(Framewor ...
- Functional programming-函数式编程
In computer science, functional programming is a programming paradigm—a style of building the struct ...
- ZBrush中Nudge推动笔刷介绍
本文我们来介绍Nudge推动笔刷,该笔刷在使用时能够产生旋转涂抹的效果,Nudge笔刷允许您在模型表面移动顶点,而这些移动的顶点仍然停留在模型的原来的表面,它与Move笔刷还是不同的,利用Move笔刷 ...
- ZBrush常用快捷键
ZBrush是一款数字雕刻和绘画软件,它以强大的功能和直观的工作流程彻底改变了整个三维雕刻行业.强大的功能离不开便捷的操作,为此ZBrush®提供了一系列常用操作快捷键,熟练掌握这些快捷键,可帮助您节 ...
- Kattis - Eight Queens
Eight Queens In the game of chess, the queen is a powerful piece. It can attack by moving any number ...
- 关于css3背景图片渐变的规则
1. Webkit引擎的CSS3径向渐变语法 Webkit引擎下的老版本语法:-webkit-gradient([<type>],[<position> || & ...