一、函数式接口

只有一个 抽象方法接口 叫函数式接口

/**
* @auther hhh
* @date 2018/12/24 22:20
* @description 函数式接口:只有 一个 抽象方法 的接口叫函数式接口
* default、static、Object中的方法除外,其他的抽象方法
*/
@FunctionalInterface//注解:java8提供的,只能标注在函数式接口之上,如果这个类不是一个函数式接口,就会报错
public interface UserMapper {
int insert();//只有一个insert()的接口是函数式接口,他就一个抽象方法
default int update() {//不是函数式接口
return 1;
}
static int delete() {//不是函数式接口
return 1;
}
//Object中的方法都不是函数式接口(与Object中一样的方法),例如:
public int hashCode();
/**
* jdk1.8之前的一些函数式接口
* 1、java.lang.Runable
* 2、java.util.Comparator
* 3、java.util.concurrent.Callable
*/
}

 二、java8中最重要的函数式接口

java8将函数式接口存放在 External Libraries->rt.jar->java->util->function包中,以下函数式接口是非常重要的。

  • Supplier<T> 代表一个输出
  • Consumer<T> 代表一个输入(一个消费)
  • BiConsumer<T, U> 代表两个输入
  • Function<T, R> 代表一个输入一个输出,T 是输入 R 是输出(输入输出是不同类型)
  • UnaryOperator<T> extends Function<T, T> 继承 Function,但是没有添加方法,只是将输入输出变成同一种T类型(输入输出是同种类型)
  • BiFunction<T, U, R> 代表两个输入一个输出(一般是输入和输出是不同类型的)
  • BinaryOperator<T> extends BiFunction<T,T,T> 代表两个输入一个输出(输入和输出的类型是一致的,类型都是 T )

一般有Bi的代表两个的意思

总结:学习lambda表达式,最重要的是泛型与函数式接口

05-07 15:27
查看更多