一.发布时间
2014 年 3 月发布
二.Lambda表达式
(1)语法
(参数) -> {方法体}
(2)接口增强
默认方法,静态增强
示例:
package com.codingfuture.cachedemo.service;
public interface AInterface {
default void test() {
}
static void demo() {
}
}
class Clazz implements AInterface {
@Override
public void test() {
}
}
class Main {
public static void main(String[] args) {
Clazz clazz = new Clazz();
clazz.test();
AInterface.demo();
}
}
(3)函数式接口
只包含一个抽象方法的接口,成为 函数式接口
Java 从诞生日起就是一直倡导"万物皆对象", 但是随着其它语言,像python的兴起和新技术的挑战 Java 不得不做出调整以便支持更加广
泛的技术要求,也即 java 不但可以支持 OOP 还可以支持 OOF (面向函数编程)。
在 Java8 中, Lambda 表达式就是一个函数式接口的实例。 这就是Lambda 表达式和函数式接口的关系。
也就是说,只要一个对象是函数式接口的实例,那么该对象就可以用 Lambda 表达式来表示。
所以以前用 匿名实现类 表示的现在都可以用 Lambda 表达式来写
三.内置函数式接口
(1)分类
Predicate<T>
断定型接口
Supplier
供给型接口
Consumer<T>
消费型接口
Function<T, R>
函数型接口
Predicate<T>
断定型接口,接受一个输入参数,返回一个布尔值结果。
Supplier
供给型接口,本质就是一个容器,可以用来存储数据(或者是产生数据的规则),然后可以供其他方法使用的这么一个接口。
Consumer<T>
消费型接口,正好与Supplier接口相反,它不是生产一个数据,而是消费一个数据其数据类型由泛型决定
如果需要两个consumer接口,可以把两个consumer接口组合到一起,在对数据进行消费,可以使用andThen方法
Function<T, R>
函数型接口,对类型为T的对象应用操作返回类型为R的对象
四.自定义函数式接口
@FunctionalInterface