背景
我们知道stream流式处理是jdk1.8新增的功能,在此之前一直是迭代器处理集合之类的类型
什么是流
现在我们认识一下流,流是 Java API 的新成员,允许程序员以声明式的方式处理集合数据,并且支持链式调用、支持并行处理。用流处理的集合数据高效且易读。
流与集合的异同
-
集合的主要功能是以一定的时间和空间复杂度存储和访问元素,而流主要是用于元素计算
-
集合中的元素可以随意添加和删除,而流不能添加和删除元素
-
流的元素是按需计算的,只有当用到时他才会参与计算,而集合中的元素必须提前全都准备好
-
流只能遍历一次,下面的代码会报错 java.lang.IllegalStateException: stream has already been operated upon or closed 流已经被消费掉
List<String> names = Arrays.asList("Java8", "Lambdas", "In", "Action");
Stream<String> s = names.stream();
s.forEach(System.out::println);
s.forEach(System.out::println);
- 集合采用外部迭代,流采用内部迭代。内部迭代意味着 Java 可以替你选择更优的迭代策略和并行处理。而外部迭代如果程序员想着做个更有的迭代/采用并行就相当于“下次一定”
流的各种计算
流具有下面各种计算方式
1.查找和匹配
2.求和
3.最大值,最小值
4.过滤
等等操作,就不再一一列举了。
写在最后
-
流是 Java API 的新成员,允许程序员以声明式的方式处理集合数据,并且支持链式调用、支持并行处理。用流处理的集合数据高效且易读。
-
流的API中可以分为两大类,中间操作和终端操作,中间操作返回流对象,可以链式调用,终端操作则返回非流对象。
-
流提供了很多方便的API,如筛选 filter、去重 distinct、截断 limit、跳过 skip、函数转换 map、扁平化 flatMap、判断流中是否有任意元素符合要求 anyMatch、是否所有元素都符合要求 allMatch、是否所有元素都不符合要求 noneMatch、查找元素 findAny findFirst、累计式的计算元素 reduce
码字不易,请多多关照,请关注我吧 _