Java8新特性之Stream API

1、Stream API的基本介绍

Java 8 API添加了一个新的抽象称为流 Stream,可以让你以一种声明的方式处理数据。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

Stream 是Java8中处理集合的关键抽象概念,它可以对集合进行非常复杂的查找、过滤、筛选等操作。这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

 

1.1、什么是stream(流)

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

注意:

  1. Stream自己不会存储元素
  2. Stream不会改变源对象。相反,他会返回一个持有结果的新Stream
  3. Stream操作是延迟执行的。意味着他会等到需要结果的时候才执行

 

2、Stream的操作步骤

Stream有如下三个操作步骤:

  1. 创建Stream:从一个数据源,如集合、数组中获取流。
  2. 中间操作:一个操作的中间链,对数据源的数据进行操作。
  3. 终止操作:一个终止操作,执行中间操作链,并产生结果。

操作步骤如下图:

Java8新特性之Stream API

 

 

要注意的是,对流的操作完成后需要进行关闭操作(或者用JAVA7的try-with-resources)。

 

2.1、创建 stream

在 Java 8 中, 集合接口有两个方法来生成流:

  • stream() − 为集合创建串行流。

  • parallelStream() − 为集合创建并行流。

 

2.2、中间操作

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

常见的中间操作有以下几种:

  • 筛选与切片

Java8新特性之Stream API

  • 映射

 Java8新特性之Stream API

  • 排序

Java8新特性之Stream API

 

 

 

2.3、终止操作

  • 查找与匹配
方法 描述
allMatch(Predicate p) 检查是否匹配所有元素
anyMatch(Predicate p) 检查是否至少匹配一个元素
noneMatch(Predicate p) 检查是否没有匹配所有元素
findFirst() 返回第一个元素
findAny() 返回当前流中的任意元素
count() 返回流中元素总数
max(Comparator c) 返回流中最大值
min(Comparator c) 返回流中最小值
forEach(Consumer c) 内部迭代(使用 Collection 接口需要用户去做迭代,称为外部迭代。相反, Stream API 使用内部迭代)
  • 归纳

Java8新特性之Stream API

 

  •  收集

Java8新特性之Stream API

 

 Collector接口中方法的实现决定了如何对流执行收集操作(如收集到List、Set、Map)。但是Collector实用类提供了很多静态方法可以方便的收集常见实例

Java8新特性之Stream API

 

Java8新特性之Stream API

 

上一篇:String分割成int[]和List


下一篇:java8中lambda的用法(map转list,list转map等等