1.8新特性-Stream流

java-1.8新特性--集合的流式编程

1. 集合流的简介

 Stream是jdk1.8之后出现的新特性,也是jdk1.8新特性最值得学习的两种特性之一。(另外一个是lambda表达式)
 Strean是对集合操作的增强,流不是集合的元素,不是一种数据结构,不负责存储数据,流更向是迭代器,可以单项的遍历集合的每一个元素,并不可循环。

1.1集合流式编程的简介

    • -

Stream是jdk1.8之后出现的新特性,也是jdk1.8新特性最值得学习的两种特性之一。(另外一个是lambda表达式)

Strean是对集合操作的增强,流不是集合的元素,不是一种数据结构,不负责存储数据,流更向是迭代器,可以单项的遍历集合的每一个元素,并不可循环。

1.2为什么要使用集合的流式编程

    • -

有些时候,对集合中的元素进行操作时,需要使用其他操作的结果,在这个过程中,集合流式编程可以大幅度简化代码的数量,将数据源中的数据读取到一个流中,可以对流中的数据进行操纵(删除,过滤,映射。。。),每次的操作结果也是一个流对象,可以对流进行其他的操作

1.3使用流式编程的步骤

    • -

通常情况下,对集合中的数据进行咯流式编程,需要进行以下三步。

  1. 获取数据源,将数据源中的数据读取到流中。
  2. 对流中的数据进行各种各样的处理。
  3. 对流中的数据进行整合处理。

在上述三个过程中,过程2,有若干方法,可以对流中的数据进行各种各样的操作,并且返回流对象本身这样的操作,被称之为--中间操作,过程3中,有若干方法,可以对流中的数据进行各种处理,并关闭流(所有数据都没有)。

在中间操作和最终操作中,基本上所有的方法参数都是函数式接口 ,可以使用lambda表达式来实现,使用流式编程,来简化代码量,是需要对lambda表达式做到熟练

2. 数据源的获取

2.1数据源的简介

数据源,顾名思义,既是流中数据的来源,是集流式来源的第一步,将数据源中的的数据读取到流中,进行处理;注意:将数据源中的数据读取到流中后,流中的数据与数据源中的数据没有关系。中间操作对流中的数据进行处理,过滤,映射,排序。。此时不会影响元数据中的内容。

2.2 数据源的获取

这个过程,其实是将容器的数据,读取到一个流中,因此无论什么容器作为数据源,读取到流中的方法返回值一定是Stream。

ArrayList list=new ArrayList<>();
Stream stream=list.stream();
Stream stream=list.parallelStream();

3. 最终操作

3.1 最终操作的简介

将流中的数据整合到一起,可以存入一个集合,也可以直接对流中的数据进行遍历,数据统计。。。通过最终操作,需要掌握如何从流中提取出来我们想要的信息。

注意事项:最终操作之所以叫最终操作,是因为在最终操作执行结束后,会关闭流,流中的所有数据销毁,如果使用一个已经关闭的流,出现异常

3.2 collect

将流中的数据收集到一起,对这些数据进行处理,最常见的处理,就是将流中的数据存入一个集合。collect的参数是一个collector接口,这个接口不是一个函数式接口,实现这个接口,可以自定义收集规则。但是绝大部分情况下,不需要自定义。

直接使用Collectors 工具类提供的方法即可。

3.3 count-计数

3.4 forEach-迭代遍历

    • -

3.5 MAX & MIN-流中大小元素

    • -

3.6 allMatch & anyMacth & 9noneMatch

    • -
  1. allMatch:只有当流中所有元素,都匹配指定规则,才会返回true
  2. anyMatch:只要流中有任意数据,满足自定规则,都会返回true
  3. noneMatch: 只有当流中所有元素,都不满足指定规则,才会返回true

3.7 find

    • -

find:从流中获取一个元素,(一般情况获取开头元素)

findAny: 从流中获取一个元素,(一般情况获取开头元素)

这两个方法绝大多数情况下是相同的,但在多线程环境下,findAny和find返回结果可能不一样

3.8 最终操作注意事项

    • -

第一次计数完流关闭

4. 中间操作

4.1 中间操作的简介

    • -

将数据从数据源读取到流中,中间操作,就是对流中的数据进行各种各样的操做,处理,中间操作可以连续操作,每一个操作的返回值都是一个Stream对象本身,可以进行其他的操作,知道最终操作。

4.2 filter

    • -

条件过滤,仅保留流中满足指定条件的数据,其他不满足的数据都会删除,

4.3 distinct-去重

    • -

4.4 sorted-去重

    • -

4.5 limit & skip

    • -

limit:限制,截取流中指定数据元素。

skip:跳过,跳过流中的指定数量元素

配合使用、

4.6 map & flatMap

    • -

map:对流中的数据进行映射,用新的数据替换数据

map最主要就是做元素替换,其实map是一个元素映射

flatMap也是元素映射,扁平化映射

你可能感兴趣的:(javajdk8)