流的定义

从支持数据处理操作的源生成的元素序列。

  • 元素序列
    就像集合一样,流也提供了一个接口,可以访问特定元素类型的一组有序
    值。因为集合是数据结构,所以它的主要目的是以特定的时间/空间复杂度存储和访问元素(如ArrayList 与 LinkedList)。但流的目的在于表达计算,比如你前面见到的
    filter、sorted和map。集合讲的是数据,流讲的是计算。

  • 流会使用一个提供数据的源,如集合、数组或输入/输出资源。 请注意,从有序集
    合生成流时会保留原有的顺序。由列表生成的流,其元素顺序与列表一致。
  • 数据处理操作
    流的数据处理功能支持类似于数据库的操作,以及函数式编程语言中
    的常用操作,如filter、map、reduce、find、match、sort等。流操作可以顺序执
    行,也可并行执行
  • 流水线
    很多流操作本身会返回一个流,这样多个操作就可以链接起来,形成一个大
    的流水线。
  • 内部迭代
    与使用迭代器显式迭代的集合不同,流的迭代操作是在背后进行的。我们
    在第1章中简要地提到了这个思想,下一节会再谈到它。
图片.png
我们先是对menu调用stream方法,由菜单得到一个流。数据源是菜肴列表(菜单),它给流提供一个元素序列。接下来,对流应用一系列数据处理操作:filter、map、limit和collect。除了collect之外,所有这些操作都会返回另一个流,这样它们就可以接成一条流水线,于是就可以看作对源的一个查询。最后,collect操作开始处理流水线,并返回结果(它和别的操作不一样,因为它返回的不是流,在这里是一个List)。在调用collect之前,没有任何结果产生,实际上根本就没有从menu里选择元素。你可以这么理解:链中的方法调用都在排队等待,直到调用collect。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容