java 函数式接口
java 函数式接口
函数式接口
含义:
只有一个抽象方法的接口,这个接口就是函数式接口
函数式接口是Lambda表达式的适用前提
格式说明:
检查一个接口是否是函数式接口,可以使用一个注解
@functionalInterface
效果:
如果不是函数式接口则编译报错
函数:
处理数据的逻辑,定义参数和处理参数的代码,可能能返回处理的结果
单独存在的一个处理逻辑,不应该从属于热别的主体(不应该属于某个类、不应该属于某个对象)
定义的角度来说,医改定义在文件中,而非某个类或者接口中
java语言只有方法没有函数
弊端:只传递原始数据或者结果数据,无法传递对于数据的处理方式;没有所谓的函数的类型,无法声明函数的引用
java的解决方案:
使用函数式接口来解决
具体:
使用几个接口讲方法包起来,认为包起来的方法就是一个函数,借口就是函数的类型,有了这个类型之后就可以声明该类型含税引用
使用接口的实现类对象,来表达函数的具体内容认为成函数类型的对象
这种结局方案称为函数式编程
原因:
每次想表达函数是,自己定义一个接口,用来表达函数的类型等,太麻烦
而且很多函数都是同一类型,且经常使用,不希望每次都要自己定义
jdk就将这些常用的函数类型,帮我们定义出来了
罗列
Consumer : 消费接口
void accept(T t)
Supplier: 供给形接口
T get()
Function: 函数型接口
R apply(T t)
Predicate : 断言型接口
boolean tst(T t)
消费型接口
Consumer : 消费接口
void accept(T t)
其中T表示该函数要消费的内容
消费:获得这个内容使用,之后就没有这个数据了
方法引用
供给型接口
public static void main(String[] args) {
// () ->new Random().nextInt(100) + 1) 相当于重写了Supplier的get方法,
//方法内容是返回new Random().nextInt(100) + 1的值
List list = creatList(10, () -> new Random().nextInt(100) + 1);
System.out.println(list);
}
public static List creatList(int n,Supplier sup){
List list = new ArrayList();
while(list.size() < n) {
list.add(sup.get());
}
return list;
}
函数型接口
断言型接口
Predicate : 断言型接口
boolean tst(T t)
java 函数式接口相关教程