java8新特性总结

1.主要内容

1. Lambda 表达式

2. 函数式接口

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

4. Stream API

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

6. 新时间日期 API

java8中最核心的新特性是: Lambda 表达式Stream API,下面主要介绍Lambda表达式和Stream;

2.Lambda表达式

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

  •  从匿名类到 Lambda 的转换
  • java8新特性总结

Lambda表达式语法:

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

两个部分:

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

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

java8新特性总结

java8新特性总结


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


3.Stream

Stream 是 Java8 中处理集合的关键抽象概念,Stream API位于 java.util.stream .*包下,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数

据库查询。也可以使用 Stream API 来并行执行操作。简而言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

什么是Stream?

流 (Stream)  到底是什么呢 ?

是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。“集合讲的是数据,流讲的是计算! 

注意:
①Stream 自己不会存储元素。
②Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。

③Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。

Stream 操作的三个步骤:

  • 创建 Stream:一个数据源(如:集合、数组),获取一个流
  • 中间操作:一个中间操作链,对数据源的数据进行处理
  • 终止操作( ( 终端操作) ):一个终止操作,执行中间操作链,并产生结果
  • java8新特性总结

创建Stream:

Java8 中的 Collection 接口被扩展,提供了两个获取流的方法 :
 default Stream<E> stream() : 返回一个顺序流

 default Stream<E> parallelStream() : 返回一个并行流

        由数组创建流:

Java8 中的 Arrays 的静态方法 stream() 可以获取数组流:
 static <T> Stream<T> stream(T[] array): 返回一个流
    重载形式,能够处理对应基本类型的数组:

  •  public static IntStream stream(int[] array)
  •  public static LongStream stream(long[] array)
  •  public static DoubleStream stream(double[] array)                                                                                                由值创建流:                                                                                                                                                           可以使用静态方法 Stream.of(), 通过显示值创建一个流。它可以接收任意数量的参数
  •     public static<T> Stream<T> of(T... values) : 返回一个流

        由函数创建流:创建无限流

可以使用静态方法 Stream.iterate() 和Stream.generate(), 创建无限流。
 迭代:public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f)

 生成:public static<T> Stream<T> generate(Supplier<T> s) :

Stream  的中间操作:

多个 中间操作可以连接起来形成一个 流水线,除非流水线上触发终止操作,否则 中间操作不会执行任何的 处理!而在 终止操作时一次性全部 处理,称为“惰性求值”。

         筛选与切片:

java8新特性总结

        映射:

java8新特性总结


        排序:

java8新特性总结

Stream 的终止操作:

 终端操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如:List、Integer,甚至是 void 。

      查找与匹配:

java8新特性总结

java8新特性总结

            归约:

java8新特性总结

         收集:

java8新特性总结

java8新特性总结

java8新特性总结

并行流和串行流

并行流 就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。Java 8 中将并行进行了优化,我们可以很容易的对数据进行并行操作。Stream API 可以声明性地通过 parallel() 与sequential() 在并行流与顺序流之间进行切换。