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 方法引用与构造器引用,数组引用的更多相关文章

  1. java8新特性——方法引用与构造器引用

    上篇文章简单学习了java8内置得4大核心函数式接口,这类接口可以解决我们遇到得大多数得业务场景得问题.今天来简单学习一下方法引用与构造器引用. 一.方法引用 方法引用:若lambda 体中得内容已经 ...

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

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

  3. Java8新特性 - 方法引用与构造器引用

    方法引用 若Lambda体中的内容有方法已经实现了,我们可以使用"方法应用",可以理解为方法引用是Lambda表达式的另外一种表现形式. 使用操作符"::"将方 ...

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

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

  5. JDK8新特性04 方法引用与构造器引用

    import java.io.PrintStream; import java.util.Comparator; import java.util.function.*; /** * 一.方法引用 * ...

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

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

  7. JAVA8方法引用

    方法引用:若Lambda方法体已经实现,我们可以使用方法引用* 主要有三种语法格式:* 对象::实例方法名* 类::实例方法名* 类::静态方法名** 注意:Lambda体中调用的方法的参数列表与返回 ...

  8. JDK8--05:方法引用和构造器引用

    在上一篇文章中,说过JDK8中内置的函数时接口,为了方便使用,JDK8还提供了方法引用和构造器引用,来简化lambda的写法 1.方法引用 方法引用说明:lambda表达式中的方法已经在其他方法中已经 ...

  9. java 基本语法(十七)Lambda (四)构造器引用与数组引用

    1.构造器引用格式:类名::new 2.构造器引用使用要求:和方法引用类似,函数式接口的抽象方法的形参列表和构造器的形参列表一致.抽象方法的返回值类型即为构造器所属的类的类型 3.构造器引用举例: / ...

随机推荐

  1. Spyder调试快捷键

    Ctrl+1:  注释.取消注释 Ctrl+4/5:  块注释 / 取消块注释 F12: 断点 / 取消断点 F5: 运行 Ctrl+F5: 启动调试 Ctrl+F10: 单步调试,跳过函数内部实现 ...

  2. Navicat 连接 Mysql 报2059错误的原因以及解决方法

    MySQL的8.0.*版本使用的是caching_sha2_password验证方式,而Navicat Premium 12还不支持该种方式.解决方案: 1,降低mysql的版本 2,设置mysql支 ...

  3. mybatis、spring、mysql、maven实现简单增删查改

    之前写过的mybatis博客作为学习mybatis.spring还是不太合适. 现在找到一个不错的例子,首先将这个完整的mybatis增删查改例子在本地上实现出来,然后再进行学习. 项目结构与运行结果 ...

  4. Javascript 正则表达式简述

    本文地址:http://www.cnblogs.com/blackmanba/p/regular-expressions-introduce.html 或者 http://forkme.info/re ...

  5. Hua Wei 机试题目四---2014

    一.计算亮灯的个数 描述:一条长廊里依次装有n(1≤n≤65535)盏电灯,从头到尾编号1.2.3.…n-1.n.每盏电灯由一个拉线开关控制.开始,电灯全部关着. 有n个学生从长廊穿过.第一个学生把号 ...

  6. 想写一个 Sketch 插件 结果 一查不可收拾 ~~ 涉及到 Symbol 符号/ Layer 图层 / Overrides 可替换变量 等等

    var sketch = context.api() var document = sketch.selectedDocument; var selection = document.selected ...

  7. P2216 [HAOI2007]理想的正方形(二维RMQ)

    题目描述 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 输入输出格式 输入格式: 第一行为3个整数,分别表示a,b,n的值 第二行至 ...

  8. P1726 上白泽慧音(0分)

    题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点.人间 ...

  9. ZBrush 笔刷的基础参数

    ZBrush®中的笔刷基本参数主要包括3个:Draw Size(绘制大小).Focal Shift(焦点衰减)和Z Intensity(深度强度),通常使用这3个基本参数对笔刷进行调整. 在视图文档区 ...

  10. 第四章 Python之文件处理

    文件操作 文件操作一般分为三步:打开文件得到文件句柄并赋值给一个变量--->通过句柄对文件进行操作-->关闭文件 f=open(r'C:\Users\hesha\PycharmProjec ...