java8的流以及流和集合的区别

本文介绍了Java8中流与集合的主要区别,包括流的惰性执行、内部迭代等特点,并详细阐述了流的中间操作和终端操作,如filter、distinct、sorted、limit、skip、map、flatMap等,以及并行流的概念。流提供了声明式处理数据集合的方式,简化了对集合的聚合操作,允许以更高效的方式处理数据,特别是支持并行化操作,提高了处理大量数据的性能。
摘要由CSDN通过智能技术生成

 

    集合是一种内存中的数据结构,包含数据结构中目前所有的值,也就是说集合中的值都要先计算好才能够放入集合中,但是流则不同,流是概念上固定的数据结构其元素是按需计算的不能添加或者删除元素,只有在需要的时候才将需要的流计算出来。集合需要提前将值全部准备好而流则是将值准备一部分。

 

    集合和流的一个区别则是遍历数据的方式,使用Collection接口需要用户去进行迭代,也就是在集合的外部这称为外部迭代。而Streams则使用内部迭代,它会代替使用者在流的内部进行迭代,还会把流值存在某个地方,只需要通过函数进行操控就可以了,Streams的内部迭代还可以自动选择一种适合计算机硬件的数据表示和并行实现。同时流只能够遍历一次。可以仅仅是通过stream().filter().count()这三个函数完成遍历工作替代for循环。stream()操作将数据转换为流,filter()执行自定义的筛选处理,并进行计数。

    1.流并不存储其元素,这些元素可能存储在底层的集合中,或是按需生成。

    2.流的操作不会修改其数据源,而是会生成一个新的流。

    3.流的操作是惰性执行的,在需要其结果时才会执行,所以需要终止操作来产生结果,这个操作会强制执行之前的惰性操作。在使用终止操作之后这个流就不能在使用了。

    4.Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator。原始版本的 Iterator,用户只能显式地一个一个遍历元素并对其执行某些操作;高级版本的 Stream,用户只要给出需要对其包含的元素执行什么操作,比如 “过滤掉长度大于 10 的字符串”、“获取每个字符串的首字母”等,Stream 会隐式地在内部进行遍历,做出相应的数据转换。Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后即用尽了,就好比流水从面前流过,一去不复返。

    5.而和迭代器又不同的是,Stream 可以并行化操作,迭代器只能命令式地、串行化操作。顾名思义,当使用串行方式去遍历时,每个 item 读完后再读下一个 item。而使用并行去遍历时,数据会被分成多个段,其中每一个都在不同的线程中处理,然后将结果一起输出。Stream 的并行操作依赖于 Java7 中引入的 Fork/Join 框架来拆分任务和加速处理过程。

    6.Stream 的另外一大特点是,数据源本身可以是无限的。获取一个数据源(source)→ 数据转换→执行操作获取想要的结果,每次转换原有 Stream 对象不改变,返回一个新的 Stream 对象(可以有多次转换),这就允许对其操作可以像链条一样排列,变成一个管道。

 

     流允许以声明的形式处理数据集合。对流的定义是从支持数据处理操作的源生产的元素序列。也就是说Stream是对集合对象的功能加强,对其进行各种便利高效的聚合操作。将集合内的元素看成是一种流,流在管道内传输,并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。元素流在管道中经过中间操作的处理,最后由最终操作得到前面处理的结果。

    中间操作(intermediate)一个流可以后面跟随零个或多个 intermediate 操作。其目的主要是打开流,做出某种程度的数据映射/过滤,然后返回一个新的流,交给下一个操作使用。这类操作都是惰性化的(lazy),就是说,仅仅调用到这类方法,并没有真正开始流的遍历。主要有以下方法(此类型的方法返回的都是Stream对象): map (mapToInt, flatMap 等)、 filter、 distinct、 sorted、 peek、 limit、 skip、 parallel、 sequential、 unordered。

 

    终端操作(terminal)一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值