1. 程式人生 > >JDK8-方法引用 ,構造引用,陣列引用(四)

JDK8-方法引用 ,構造引用,陣列引用(四)

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); } }