JDK8 中的 Stream 是对集合(Collection)对象功能的增强,它借助于lambda表达式,更优雅的表达风格,极大的提高编程效率和程序可读性。它针对于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。
体验用Stream遍历集合
筛选并输出姓张长度为3 的人
public class Demo {
public static void main(String[] args) {
ArrayListlist=new ArrayList<>();
list.add("张无忌");
list.add("周芷若");
list.add("赵敏");
list.add("张强");
list.add("张三丰");
list.stream()
.filter(name->name.startsWith("张"))
.filter(name->name.length()==3)
.forEach(name-> System.out.println(name));
}
}
只需3行!就可以代替for循环加多个if,十分好用
流式思想:
建立“生产线”,按照“上产线”生产"商品”。
这里的filter,map,skip都是在对函数模型进行操作,集合元素并没有被真正处理。只有当终结方法count执行时,整个模型才会按照指定策略执行操作,而这得益于Lambda的延迟执行特性
Stream流是一个集合元素的函数模型,它并不是集合,也不是数据结构,其本身并不储存任何元素
Stream流式一个来自数据源的元素队列元素是特定类型的对象,形成一个队列
Java中的Stream流并不会储存元素,而是按需计算
数据源:流的来源。可以是集合数据,数组等
Pipelining:中间操作都会返回流对象本身。这样多个操作可以串联成一个管道,如同流式风(fluent style)这样做可以对操作进行优化,比如延迟执行(laziness)和短路(short-circulting)
内部迭代:以前对集合遍历都是通过iterator或增强for的方式。显式的在集合外部进行迭代,这叫外部迭代。Stream提供了内部迭代的方式,流可以直接调用遍历方法
当使用一个流的时候,通常包括三个基本步骤:
获取一个数据源(source)->数据转换—>执行操作获取想要的结果
每次转换原有Stream对象不改变,返回一个新的Stream对象(可以有多次转换),这就允许对其操作可以像链条一样排列,变成一个管道。
下一篇笔记:
【java笔记】Stream流(2):获取流的两种方法_m0_52043808的博客-CSDN博客



