您的位置:首页 > 编程语言 > Java开发

JDK8-方法引用 ,构造引用,数组引用(四)

2017-06-19 21:45 225 查看
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);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jdk jdk8-新特性