JDK8-方法引用 ,構造引用,陣列引用(四)
阿新 • • 發佈:2019-02-17
package cn.wcj.jdk8.lambda.test;
import java.io.PrintStream;
import java.util.function.BiFunction;
import java.util.function.BiPredicate;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.function.Supplier;
import org.junit .Test;
/**
*
* <p>Title:LambdaTest4 </p>
* <p>Description:方法引用 ,構造引用,陣列引用</p>
* <p>Company:Software College </p>
* @author SuccessKey(WangCJ)
* @date 2017年6月19日 下午4:37:06
*/
/*
* 一、方法引用:若 Lambda 體中的功能,已經有方法提供了實現,可以使用方法引用
* (可以將方法引用理解為 Lambda 表示式的另外一種表現形式)
*
* 1. 物件的引用 :: 例項方法名
*
* 2. 類名 :: 靜態方法名
*
* 3. 類名 :: 例項方法名
*
* 注意:
* ①方法引用所引用的方法的引數列表與返回值型別,需要與函式式介面中抽象方法的引數列表和返回值型別保持一致!
* ②若Lambda 的引數列表的第一個引數,是例項方法的呼叫者,第二個引數(或無參)是例項方法的引數時,格式: ClassName::MethodName
*
* 二、構造器引用 :構造器的引數列表,需要與函式式介面中引數列表保持一致!
*
* 1. 類名 :: new
*
* 三、陣列引用
*
* 型別[] :: new;
*
*
*/
public class LambdaTest4 {
//物件的引用 :: 例項方法名
@Test
public void test1() {
PrintStream printStream = System.out ;
Consumer<String> consumer=(x)->printStream.println(x);
consumer.accept("劉彤大寶劍爽歪歪!!!") ;
Consumer<String> consumer2=printStream::println ;
consumer2.accept("劉彤最愛大寶劍!!!") ;
Consumer<String> consumer3=System.out::println ;
consumer3.accept("劉彤哥哥我約你,晚上老地方見!!!");
}
//物件的引用 :: 例項方法名
@Test
public void test2(){
Emp emp=new Emp("666", "劉彤", 666.0, 666) ;
Supplier<String> supplier=()->emp.getEname() ;
System.out.println(supplier.get()) ;
Supplier<String> supplier2=emp::getEname ;
System.out.println(supplier2.get());
}
@Test
public void test3(){
BiPredicate<String, String> bp=(x,y)->x.equalsIgnoreCase(y) ;
boolean b = bp.test("hello", "Hello") ;
System.out.println(b);
BiPredicate<String, String> bp2=String::equalsIgnoreCase ;
boolean b2 = bp2.test("JAVA", "java") ;
System.out.println(b2);
}
//類名 :: 靜態方法名
@Test
public void test4(){
BiFunction<Integer, Integer, Integer> fun=(x,y)->Math.max(x, y) ;
System.out.println(fun.apply(1, 2)) ;
BiFunction<Integer, Integer, Integer> fun2=Math::max ;
System.out.println(fun2.apply(200, 100));
}
//構造器引用
@Test
public void test5(){
Function<String, Emp> fun=(x)->new Emp(x) ;
System.out.println(fun.apply("8888")) ;
Function<String, Emp> fun2=Emp::new ;
System.out.println(fun2.apply("8888")) ;
BiFunction<String, String, Emp> bf=Emp::new ;
System.out.println(bf.apply("8888", "劉八蛋")) ;
}
//陣列引用
@Test
public void test6(){
Function<Integer, String[]> fun=(len)->new String[len] ;
String[] arr = fun.apply(10) ;
System.out.println(arr.length) ;
Function<Integer, String[]> fun2=String[]::new ;
System.out.println(fun2.apply(20).length);
}
}