定义:一个接口中,只声明了一个抽象方法,此接口我们成为函数式接口
举例:
@FunctionalInterface
public interface StudTest<T> {
int sum(T a,T b);
}
Java8
提供得函数式接口:
4大核心函数式接口
接口名称 | 参数类型 | 返回类型 | 用途说明 |
---|---|---|---|
Consumer<T> | T | void | 对类型T的对象应用操作,包含方法accept(T t) |
Supplier<T> | 无 | T | 返回类型为T的对象,包含方法T get() |
Function<T,R> | T | R | 对类型为T的对象应用操作,返回结果为R的类型对象,包含方法R apply(T t) |
Predicate<T> | T | boolean | 确定类型T的对象是否满足某约束,返回boolean值,包含方法boolean test(T t) |
示例:
public class FunctionalTest {
/** 消费性接口: Consumer<T> void accept(T t) */
public static void consumer(){
Consumer<String> test = (a) -> System.out.println(a + " test");
test.accept("function");
}
/** 供给型接口: Supplier<T> T get() */
public static void supplier(){
Supplier<Integer> test = () -> 1;
System.out.println("商品价格:" + test.get());
}
/** 函数型接口: Supplier<T,R> R apply(T t) */
public static void function(){
Function<Integer,Integer> test = (a) -> a > 20 ? 15 : 25;
System.out.println("商品价格:" + test.apply(21));
}
/** 断定型接口: Predicate<T> boolean test(T t) */
public static void predicate(){
Predicate<Integer> test = (a)->a > 3;
System.out.println("2>3:"+test.test(2));
}
}
其他函数式接口:
接口名称 | 参数类型 | 返回类型 | 用途说明 |
---|---|---|---|
BiFunction<T,U,R> | T,U | R | 对类型T,U参数操作,返回R类型结构,包含方法R apply(T t,U u) |
UnaryOperator<T> | T | T | 对类型T的对象进行一元运算,返回T的结果,T apply(T t) |
BinaryOperator<T> | T,T | T | 对类型T的对象进行二元运算,返回T的结果,T apply(T1 t1,T2 t2) |
BiConsumer<T,U> | T,U | void | 对类型T,U操作,void accept(T t,U u) |
BiPredicate<T,U> | T,U | boolean | 断定 |
ToIntFunction<T> ToLongFunction<T> ToDoubleFunction<T> | T | int\long\double | 分别计算int\long\double值的函数 |
IntFunction<R> LongFunction<R> DoubleFunction<R> | int\long\double | R | 参数分别为int\long\double类型的函数 |