一篇文章搞定java8新特性

java的新特性简介

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

其中最为核心的为 Lambda 表达式与Stream API

主要内容

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

1. Lambda表达式

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

从匿名类到 Lambda 的转换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Lambda 表达式语法

Lambda 表达式在Java 语言中引入了一个新的语法元素和操作符。这个操作符为 “- >” , 该操作符被称为 Lambda 操作符或剪头操作符。它将 Lambda 分为
两个部分:
左侧:指定了 Lambda 表达式需要的所有参数
右侧:指定了 Lambda 体,即 Lambda 表达式要执行的功能。

语法格式一 : 无参,无返回值,Lambda 体只需一条语句
在这里插入图片描述
语法格式二 :Lambda 需要一个参数
在这里插入图片描述
语法格式三 :Lambda 只 需 要一个参数时,参数的小括号可以省略
在这里插入图片描述
语法格式四 :Lambda 需要两个参数,并且有返回值
在这里插入图片描述
在这里插入图片描述

类型推断

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

2.函数式接口

什么是函数式接口

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

自定义函数式接口

在这里插入图片描述

函数式接口中使用泛型

在这里插入图片描述

作为递 参数传递 Lambda :

在这里插入图片描述

作为参数传递 Lambda 表达式:

在这里插入图片描述
作为递 参数传递 Lambda 将 表达式:为了将 Lambda 表达式作为参数传递,接收 Lambda 该 表达式的参数类型必须是与该 Lambda 表达式兼容的函数式接口的类型。

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

在这里插入图片描述

其他接口

在这里插入图片描述

3. 方法引用与构造器引用

方法引用

当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用!(实现抽象方法的参数列表,必须与方法引用方法的参数列表保持一致!)方法引用:使用操作符 “ ::” 将方法名和对象或类的名字分隔开来。
如下三种主要使用情况 :
在这里插入图片描述

方法引用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.强大的 Stream API

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

并行流和串行流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 新的时间日期API

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.接口中的默认方法与静态方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其他的新特性

在这里插入图片描述
在这里插入图片描述