Contents
  1. 1. jdk1.8新特性之lambda 表达式
    1. 1.1. 1.使用()->{} 代替匿名内部类
  2. 2. 语法
    1. 2.1. 2.方法引用
    2. 2.2. 3.函数式接口
    3. 2.3. 4.默认方法
      1. 2.3.1. 静态默认方法
      2. 2.3.2. 为什么要有这个特性?
    4. 2.4. 5.Stream 特性
    5. 2.5. 6.base64
    6. 2.6. 7.java api 新的日期时间API

jdk1.8新特性之lambda 表达式

1.使用()->{} 代替匿名内部类

允许把函数作为一个方法参数传入,使得代码变得更加简洁。强大的函数式编程。

减少代码冗余量,可读性强。

语法

lambda 表达式的语法格式如下:

(parameters) -> expression 或 (parameters) ->{ statements; }

2.方法引用

通过方法的名字来指向一个方法 ::

3.函数式接口

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

1
@FunctionalInterface----  主要用于编译级错误检查

 定义:“函数式接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。jdk1.8提供了一个@FunctionalInterface注解来定义函数式接口,如果我们定义的接口不符合函数式的规范便会报错。

若一个接口中包含多个抽象方法,是没有办法通过表达式左侧的参数列表来定位到对应的方法。

类型推断机制的加入,java编译器可以根据上下文在后台推断出参数的类型,故无需再参数列表中制定参数类型。

函数式编程可以友好的进行

Predicate 接口是函数式接口,它接受一个输入参数T,返回一个布尔值结果

4.默认方法

jdk1.8新增默认方法,就是接口中可以有实现方法,而且不需要实现类去实现其方法。

只需要在方法前加上default关键字即可实现默认方法。

静态默认方法

Java 8 的另一个特性是接口可以声明(并且可以提供实现)静态方法

为什么要有这个特性?

首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类,目前的 java 8 之前的集合框架没有 foreach 方法,通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现。然而,对于已经发布的版本,是没法在给接口添加新方法的同时不影响已有的实现。所以引进的默认方法。他们的目的是为了解决接口的修改与现有的实现不兼容的问题。

5.Stream 特性

新的抽象称为Stream ,可以以一种声明方式处理数据。

理解:

1.Stream是元素的集合,看起来类似Iterator

2.可以支持顺序和并行的对原Stream进行汇聚的操作;

Stream API 可以极大的提高java程序员的生产力,让程序员写出高效率,干净,简洁的代码。

筛选 排序 聚合等操作

常用方法:

1.生成流

stream() - 为集合创建串行流

parallelStream() - 为集合创建并行流

2.forEach()

迭代流中的每个元素

3.map

map 方法用于映射每个元素到对应的结果,

4.filter

filter 方法用于通过设置的条件过滤出元素。以下代码片段使用 filter 方法过滤出空字符串:

5.limit

limit 方法用于获取指定数量的流。 以下代码片段使用 limit 方法打印出 10 条数据

6.sorted

sorted 方法用于对流进行排序。以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序:

7.Collectors

Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素。Collectors 可用于返回列表或字符串

6.base64

7.java api 新的日期时间API

Contents
  1. 1. jdk1.8新特性之lambda 表达式
    1. 1.1. 1.使用()->{} 代替匿名内部类
  2. 2. 语法
    1. 2.1. 2.方法引用
    2. 2.2. 3.函数式接口
    3. 2.3. 4.默认方法
      1. 2.3.1. 静态默认方法
      2. 2.3.2. 为什么要有这个特性?
    4. 2.4. 5.Stream 特性
    5. 2.5. 6.base64
    6. 2.6. 7.java api 新的日期时间API