Java8新特性(Lambda 表达式,函数式接口,方法的引用和构造器的引用)

主要内容

 

  1. Lambda 表达式
  2. 函数式接口
  3. 方法引用与构造器引用
  4. Stream API
  5. 接口中的默认方法与静态方法
  6. 新时间日期API
  7. 其他新特性

特点

    1. 速度更快
    2. 代码更少(增加了新的语法 Lambda 表达式
    3. 强大的 Stream API
    4. 便于并行
    5. 最大化减少空指针异常 Optional

 

为什么使用Lambda 表达式

  1. Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。

 

Lambda 表达式在Java 语言中引入了一个新的语法元素和操作符。这个操作符为 “->” , 该操作符被称为 Lambda 操作符或剪头操作符。它将 Lambda 分为两个部分:

 

左侧:指定了 Lambda 表达式需要的所有参数

右侧:指定了 Lambda 体,即 Lambda 表达式要执行的功能。

 

 

上述 Lambda 表达式中的参数类型都是由编译器推断得出的。Lambda 表达式中无需指定类型,程序依然可以编译,这是因为 javac 根据程序的上下文,在后台推断出了参数的类型。Lambda 表达式的类型依赖于上下文环境,是由编译器推断出来的。这就是所谓的 “类型推断”

什么是函数式接口

 

  1. 只包含一个抽象方法的接口,称为函数式接口
  2. 你可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda 表达式抛出一个受检异常,那么该异常需要在目标接口的抽象方 法上进行声明)。
  3. 我们可以在任意函数式接口上使用 @FunctionalInterface 注解, 这样做可以检查它是否是一个函数式接口,同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口。

 Java 内置四大核心函数式接口

函数式接口

参数类型

返回类型

用途

Consumer<T> 消费型接口

T

void

对类型为T的对象应用操作,包含方法: void 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);

其他接口 

函数式接口

参数类型

返回类型

用途

BiFunction<T, U, R>

T, U

R

对类型为 T, U 参数应用操作, 返回 R 类型的结果。包含方法为

R apply(T t, U u);

UnaryOperator<T> (Function子接口)

T

T

对类型为T的对象进行一元运算, 并返回T类型的结果。包含方法为

T apply(T t);

BinaryOperator<T>

(BiFunction 子接口)

T, T

T

对类型为T的对象进行二元运算, 并返回T类型的结果。包含方法为

T apply(T t1, T t2);

BiConsumer<T, U>

T, U

void

对类型为T, U 参数应用操作。包含方法为

void accept(T t, U u)

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 类型的函数

方法引用与构造器引用 

当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!

实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致!

方法引用:使用操作符 “::” 将方法名和对象或类的名字分隔开来。

如下三种主要使用情况:

 

  1. 对象::实例方法

 

  1. 类::静态方法

 

  1. 类::实例方法

 

 

 

发布了406 篇原创文章 · 获赞 212 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/qq_27248989/article/details/105438120