共计 1993 个字符,预计需要花费 5 分钟才能阅读完成。
java-1.8 新个性 – 汇合的流式编程
1. 汇合流的简介
Stream 是 jdk1.8 之后呈现的新个性,也是 jdk1.8 新个性最值得学习的两种个性之一。(另外一个是 lambda 表达式)Strean 是对汇合操作的加强,流不是汇合的元素,不是一种数据结构,不负责存储数据,流更向是迭代器,能够单项的遍历汇合的每一个元素,并不可循环。
1.1 汇合流式编程的简介
-
- –
Stream 是 jdk1.8 之后呈现的新个性,也是 jdk1.8 新个性最值得学习的两种个性之一。(另外一个是 lambda 表达式)
Strean 是对汇合操作的加强,流不是汇合的元素,不是一种数据结构,不负责存储数据,流更向是迭代器,能够单项的遍历汇合的每一个元素,并不可循环。
1.2 为什么要应用汇合的流式编程
-
- –
有些时候,对汇合中的元素进行操作时,须要应用其余操作的后果,在这个过程中,汇合流式编程能够大幅度简化代码的数量,将数据源中的数据读取到一个流中,能够对流中的数据进行操纵(删除,过滤,映射。。。),每次的操作后果也是一个流对象,能够对流进行其余的操作
1.3 应用流式编程的步骤
-
- –
通常状况下,对汇合中的数据进行咯流式编程,须要进行以下三步。
- 获取数据源,将数据源中的数据读取到流中。
- 对流中的数据进行各种各样的解决。
- 对流中的数据进行整合解决。
在上述三个过程中,过程 2,有若干办法,能够对流中的数据进行各种各样的操作,并且返回流对象自身这样的操作,被称之为 – 两头操作,过程 3 中,有若干办法,能够对流中的数据进行各种解决,并敞开流(所有数据都没有)。
在两头操作和最终操作中,基本上所有的办法参数都是函数式接口,能够应用 lambda 表达式来实现,应用流式编程,来简化代码量,是须要对 lambda 表达式做到纯熟
2. 数据源的获取
2.1 数据源的简介
数据源,顾名思义,既是流中数据的起源,是集流式起源的第一步,将数据源中的的数据读取到流中,进行解决;留神:将数据源中的数据读取到流中后,流中的数据与数据源中的数据没有关系。两头操作对流中的数据进行解决,过滤,映射,排序。。此时不会影响元数据中的内容。
2.2 数据源的获取
这个过程,其实是将容器的数据,读取到一个流中,因而无论什么容器作为数据源,读取到流中的办法返回值肯定是 Stream。
ArrayList<Integer> list=new ArrayList<>();
Stream<Integer> stream=list.stream();
Stream<Integer> 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
-
- –
- allMatch:只有当流中所有元素,都匹配指定规定,才会返回 true
- anyMatch:只有流中有任意数据,满足自定规定,都会返回 true
- 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 也是元素映射,扁平化映射