函数式接口:
1、有且仅有一个抽象方法的接口
2、可以有默认方法、静态方法
FunctionalInterface 注释:
与@Override 注释作用类似,该注释可以用于一个接口的定义
@FunctionalInterface
public interface MyFunctionalInterface{
public abstract void myMethod();//只有一个抽象方法
public static void method1(){
//省略内容
}
public default void method2(){
//省略内容
}
}
常用函数式接口
主要在java.util.function下
1、Supplier接口
Supplier< T >
方法:
T get()获得结果
/*
Supplier<Integer> s=new Supplier<Integer>(){
@Override
public Integer get(){
return 10;
}
};
*/
//使用Lambda表达式
Supplier<Integer> s2= ()->{return 10;};
2、Consumer接口
Consumer< T>
方法:
void accept(T t) 对获取的数据进行操作
Consumer<String s> c=(String s)->{
System.out.println(s);};
c.accept("helloworld") //输出helloworld
3、Function接口
Function< T,R>转换型接口,根据一个类型的数据,得到另一个类型的数据,前者称为前置条件,后者称为后置条件
方法:
R apply(T ,t)根据T类型的数据, 返回R类型的数据
Function<String ,Integer > f=(String s)->{
return Integer.parseInt(s);};
Integer num=f.apply("10");
System.out.println(num);
4、Predicate接口
Predicate< T> 对某种数据类型进行判断
方法:
boolean test(T t)
Predicate<String> p=(String s)->{return s.endsWith(".java");};
p.test("aaaa.java");