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.构造器引用举例: / ...
随机推荐
- ASP.NET Core-组件:目录
ylbtech-ASP.NET Core-组件:目录 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http ...
- 如何在rul中添加图片
先制作要添加的ico图,如faction.ico 在<title>使用 <link rel="icon" href="../images/faction ...
- 运算符 and or ont
运算符 逻辑运算: and 并且的意思. 左右两端的值必须都是真. 运算结果才是真 or 或者的意思. 左右两端有一个是真的. 结果就是真. 全部是假. 结果才能是假 not 非的意思. 原来是假. ...
- python中在py代码中如何去调用操作系统的命令
import socket import subprocess sk = socket.socket() sk.bind(('127.0.0.1',10800)) sk.listen() conn,a ...
- C# 正则表达式
C# 正则表达式 正则表达式 是一种匹配输入文本的模式..Net 框架提供了允许这种匹配的正则表达式引擎.模式由一个或多个字符.运算符和结构组成. 定义正则表达式 下面列出了用于定义正则表达式的各种类 ...
- ES6常用特性
以下是ES6排名前十的最佳特性列表(排名不分先后): Default Parameters(默认参数) in ES6 Template Literals (模板文本)in ES6 Multi-line ...
- javascript中手风琴特效
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- DirectUI界面编程(零)简介
有过Win32.MFC编程经验的朋友应该都知道,传统Windows应用中的按钮.编辑框等控件都是一个子窗口,操作系统通过窗口句柄来唯一标识该窗口. 使用Windows 标准控件创建用户界面,美化起来是 ...
- ZBrush创建人体模型-ZBrush中ZSphere的基本使用
本教程我们将学习ZSphere(Z球)在ZBrush®中的基本使用情况,了解它在个人创作过程中发挥着怎样的作用.作为ZBrush中的独特功能之一,ZSphere能够让用户通过清晰的拓扑结构创建基础模型 ...
- uva 11300 Spreading the Wealth_数学推倒 + 思维
这道题和负载平衡问题是同一道题, 如果 n<=100n <= 100n<=100 的话是可以用最小费用流来求解的. 但是题中 nnn 最大可达到 10610^6106, 这就需要我们 ...