-
要使用Lambda表达式往往离不开使用函数式接口,但是如果每次使用Lambda表达式都要自定义一个函数式接口的话,那么Lambda表达式就没有完全起到简化代码的作用.
-
所以java8中内置了一些函数式接口来供开发者们调用,这样就不需要开发者们重复定义函数式接口了.
-
java8中核心的函数式接口有以下四个
名称 | 作用 | 参数 | 返回值 |
---|---|---|---|
Consumer<T> | 消费型接口,给定一个参数,对这个参数进行一系列的操作 | T | 无 |
Supplier<T> | 供给型接口,返回类型为T的参数,包含方法:get() | 无 | T |
Function<T,R> | 对类型为T的对象操作,返回类型为R的对象,包含方法:apply() | T | R |
Predicate<T> | 确定类型为T的对象是否满足某约束,并返回boolean 值。包含方法boolean test(T t); | T | 无 |
- 使用示例
/**
* 消费型接口
* @param string
* @param consumer
*/
public void myConsumer(String string, Consumer<String> consumer){
consumer.accept(string);
}
/**
* 供给型接口
* @param supplier
* @return
*/
public Integer mySupplier(Supplier<Integer> supplier){
return supplier.get();
}
/**
* 函数新接口,返回指定数量的整数集合
* @param num 整数个数
* @param function
* @return
*/
public List<Integer> myFunction(int num, Function<Integer,List<Integer>> function){
List<Integer> apply = function.apply(num);
return apply;
}
/**
* 断言型接口,判断 参数a是否大于10
* @param a
* @param predicate
* @return
*/
public boolean myPredicate(int a, Predicate<Integer> predicate){
return predicate.test(a);
}