import org.junit.Test;
import java.io.PrintStream;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.function.*;
public class TestMethod {
@Test
//对象::实力方法名
public void test1(){
PrintStream printStream=System.out;
Consumer con=(x)-> System.out.println(x);
con.accept(100);
Consumer con1=(y)->printStream.println(y);
con1.accept("wang");
Consumer con2=printStream::println;
con2.accept("张三");
Consumer con3=System.out::println;//lambda体中println的实例方法参数,必须和accept抽象方法的参数类型相同
con3.accept("哈喽");
}
@Test
// 类::静态方法名
public void test2(){
Comparator comparator=(x,y)->Integer.compare(x,y);
Comparator comparator1=Integer::compare;
}
@Test
//类::实例方法名
public void test3(){
BiPredicate predicate=(x, y)->x.matches(y);
predicate.test("ABC","wed");
BiPredicate predicate1=String::matches;//调用的函数式接口中的抽象方法有两个参数,第一个参数是实例方法的调用者,另一个是实例方法的参数
}
@Test
//构造器应用
//ClassName::new
public void test4(){
Supplier studentSupplier=()->new Student();//此时调用的是构造器中的无参构造器
Supplier studentSupplier1=Student::new;
Student stu1=studentSupplier1.get();
System.out.println(stu1);
Student stu=studentSupplier.get();
System.out.println(stu);
}
//若函数式接口有两个参数,那么就会调用构造器中两个参数。
@Test
//数组引用
//Type[]::new
public void test5(){
Function fun=(x)->new String[x];
String [] arr=fun.apply(18);
System.out.println(arr.length);
Function fun1=String[]::new;
String arr1[]=fun1.apply(29);
System.out.println(arr1.length);
}
}