stream流式编程

什么是流

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

java的流式编程更像是一种思想,一种生产方式,将原有的集合的显示操作转换成隐式的操作,使得我们更注重集合操作后的结果而不关注集合处理的过程。

流的名词定义

  • 元素序列:

  • 可以访问特定元素类型的一组有序值

  • 源:

    • 提供数据的源
      • 有序集合生成流时会保留原有的顺序
  • 数据处理操作:

    • 流的数据处理功能
      • filter
      • map
      • reduce
      • find
      • match
      • sort等
  • 流水线

    • 多个流连接接起来就形成了一个流水线
  • 内部迭代

    • 流的迭代操作和集合不同,是在背后进行的
  • 中间操作

    • 所有不阻断流的操作,即返回值也是一个流的操作连接起来都成为中间操作

    • .filter()
      .map()
      .limit() 截取流
      .skip() 跳过指定个数元素的流
      .sorted()
      .distinct()
      
    • filter()

      • 参数为一个谓词(谓词返回值为boolean的函数)
      • 返回一个符合条件的元素流
    • distinct()

      • 返回一个没有重复元素的流
    • limit()

      • 返回一个截断流
    • skip()

      • 返回一个跳过n个元素的流
    • map()

      • 参数为一个函数,将参数映射到集合中的每个元素
      • 返回一个流(每一个元素形成一个流,最后被合并成一个扁平化流)
    • flatMap()

      • 参数为一个函数,将参数映射到集合中的每个元素
      • 返回一个流,(将所有元素映射成同一个流中的内容)
    • orElse(code)

      • 返回流操作中的值
      • 如果值存在则返回值,如果值不存在则返回指定的code
  • 终端操作

    • 中间操作之后,阻断流的操作即返回值不是流的操作

    • .count()
      .collect()
      .forEach()
      .anyMatch()
      
    • anyMatch()

      • 流中是否有一个元素能匹配给定的谓词
      • 返回一个boolean
    • allMatch()

      • 流中元素是否都能匹配给定的谓词
      • 返回一个boolean
    • noneMatche()

      • 流中元素是否都不与给定谓词匹配
      • 返回boolean
    • findAny()

      • 返回流中的任意元素
    • findFirst()

      • 返回流中第一个元素
  • 短路

    • 某些操作不用处理整个流就能得到结果,当对流的操作返回特定的值时就不继续操作流了。
  • 归约

    • 将流中元素组合起来
    • reduce()
      • 将流中元素结合起来的操作叫做归约操作,也称为折叠

流的组成部分

  • 数据源
  • 中间操作
  • 终端操作

显示的创建流

  • Stream.of(List)
  • Arrays.stream(new int[] {1,2,3,4})
    • 现实的创建一个IntStream
  • 文件流

流操作的注意点

  • 流只能被消费一次,重复消费会出现异常

    • java.lang.IllegalStateException: stream has already been operated upon or closed
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值