java8lambda表达式day01

一、函数式接口

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

/**
 * @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表达式,最重要的是泛型与函数式接口

猜你喜欢

转载自www.cnblogs.com/huanghuanghui/p/10171589.html