java8新特性-函数式接口

函数式接口
消费型接口 Consumer<T> void accept(T t);
供给型接口 Supplier<T> T get();
函数型接口 Function<T> R apply(T t);
断定型接口 Predicate<T> boolean test(T t);

只定义【一个抽象方法】的接口
    只能有一个抽象方法
    可以有静态方法和默认方法,因为这两种方法都是已经实现的了
    可以包含Object里所有能重写的方法,因为即使接口包含像String toString()这样的抽象方法,它的实现类也会因继承了Object类,而再次对接口中的toString()方法进行实现。
注:哪怕有很多默认方法,只要接口只定义了一个抽象方法,它就仍然是一个函数式接口。

1)函数式接口的作用
方便直接用Lambda表达式构造出实例,让代码更加简洁
Lambda表达式允许你直接以内联的形式为函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例。
你用匿名内部类也可以完成同样的事情,只不过比较笨拙。
Comparator<String> c = new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o2.length()-o1.length();
        }
    };
//函数式编程 : 参数+返回值
    Comparator<String> d = (o1,o2)->o2.length()-o1.length();

原文地址:https://www.cnblogs.com/yxj808/p/14960150.html