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.构造器引用举例: / ...
随机推荐
- bzoj5216: [Lydsy2017省队十连测]公路建设
题目思路挺巧妙的. 感觉应该可以数据结构一波,发现n很小可以搞搞事啊.然后又发现给了512mb,顿时萌生大力线段树记录的念头 一开始想的是记录节点的fa,然后发现搞不动啊?? 但其实边肯定最多只有n- ...
- Fragment间相互调用并传值
public class MainFragment extends Fragment { private static final String ARG_DATE="com.example. ...
- MS SQL 获取数据字典的经典sql语句
select [表名]=c.Name, [表说明]=isnull(f.[value],''), [列名]=a.Name, [列序号]=a.Column_id, [标识]=case when is_id ...
- Exception异常常见属性
废话少说,直接上代码: try { int n = Convert.ToInt32("@"); } catch(Exception ex) { Console.WriteLine( ...
- Hessian 接口使用示例总结
一.使用hessian接口准备 首先,hessian接口的使用,必须要准备hessian接口的jar包,本文使用的jar包如下:hessian-4.0.7.jar; Hessian接口的使用一般是在两 ...
- solarwinds之配置系统管理(System manager)
配置windows的 1. 打开System Manager 2. 点击new新加一个接口 3. 选择要监控的资源 4. 确认好自己要监控的资源后如下 5. 这里以监控内存使 ...
- 人人都是产品经理?关于PM你不知道的还有很多
产品经理的职称最早出现在P&G宝洁公司,因效果非常显著,许多企业纷纷仿而效尤.硅谷知名的产品管理大师Marty Cagan在<Inspired: How To Create Produc ...
- face++算法工程实习生面试
2018-01-11 算法工程实习生 自动化工具链方面 面试的知识点非常仔细,十分检验基本功底 1.自我介绍 2.算法题,leetcode 第一题 两数之和 问python中数组和字典的查找时间复杂 ...
- node——try-catch与异步操作
//try-catch,用于捕获异常 //try-catch在node中只能捕获同步的异常,不能捕获异步异常 var fs=require('fs'); /*fs.writeFile('./abc.t ...
- Python_study_day_1_while_if
1.什么是计算机 cpu:大脑 3GHz 内存:缓冲硬盘和cpu,提高计算机运算速度 硬盘:存储数据 2.编程语言的简单分类 编译型,解释型,混合型 3.python是什么编程语言 解释类语言 //. ...