函数式接口
和匿名内部类的效果相同但比匿名内部类实现起来更为简单快捷
Predicate接口的测试使用,返回值为true/false
用不同的处理方式去处理传入的参数
Predicate接口=lambda表达式(具体的处理方式)
不同的Predicate.方法()(这个方法的实现交给lambda表达式);
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
public class Test1 {
public static void show(List<String> list,Predicate<String> pre) {
for(String msg:list) {
//自定义规则,测试msg
boolean test = pre.test(msg);
if(test) {
System.out.println(msg);
}
}
}
public static void main(String[] args) throws Exception {
List<String> list=new ArrayList<>();
list.add("tom");
list.add("tom1");
list.add("tom2");
list.add("lom3");
list.add("tom4wem");
// Predicate<String> p1=new Predicate() {
//
// @Override
// public boolean test(Object t) {
// // TODO Auto-generated method stub
// return false;
// }};
Predicate<String> p2=(t)->{return true;};
Predicate<String> p3=(msg)->{
return msg.startsWith("l");};
Predicate<String> p4=(msg)->{
return msg.length()>4?true:false;};
Predicate<String> p5=(msg)->{
return msg.endsWith("m");};
Predicate<String> p54=p5.and(p4);
show(list,p54);
}
}
Supplier接口
import java.util.UUID;
import java.util.function.Supplier;
//Supplier
public class Test3 {
public static void main(String[] args) throws Exception {
//lambda表达式实现抽象方法
Supplier<String> su=()->{
String uuid=UUID.randomUUID().toString();
return uuid.substring(0,8);
};
System.out.println(su.get());
}
}
Consumer接口
//Consumer
public class Test4 {
public static void show(List<String> list, Consumer<String> con){
for(String msg:list) {
con.accept(msg);
}
}
public static void main(String[] args) throws Exception {
List<String> list=new ArrayList<>();
list.add("tom");
list.add("tom1");
list.add("tom2");
list.add("lom3");
list.add("tom4wem");
Consumer<String> con=(msg)->{
System.out.println(msg);
};
show(list,con);
}
}
Function接口
import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;
public class Test2 {
public static void show(List<String> list,Function<String,Integer> fun) {
for(String msg:list) {
//使用接口中的方法
Integer apply = fun.apply(msg);
System.out.println(apply);
}
}
public static void main(String[] args) throws Exception {
List<String> list=new ArrayList<>();
list.add("tom");
list.add("tom1");
list.add("tom2");
list.add("lom3");
list.add("tom4wem");
Function<String, Integer> f1=(msg)->{
return msg.length();
};
show(list,f1);
}
}
函数式接口调用构造函数
import java.util.function.Function;
import java.util.function.Supplier;
import com.briup.ch24.*;
//方法引用
public class Test6 {
public static void cons() {
//无参构造
//无参有返回值
Supplier<Student> s1=()->{return new Student();};
s1.get();
Supplier<Student> s2=Student::new;
Student s21=s2.get();
//有参构造
//有参有返回值,一个参数,一个返回值
Function<Integer, Student> s3=Student::new;
Student apply = s3.apply(10);
System.out.println(apply.getId());
}
public static void main(String[] args) throws Exception {
cons();
}
}