欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java中的Stream学习

程序员文章站 2022-12-09 08:02:45
StreamAPI是用来处理数据,处理集合等容器中的数据,处理操作有:查询、筛选、删除、过滤、统计、映射等。希望能够用类似于SQL语法的形式对Java内存中的数据进行处理。 Stream的特点: (1)Stream本身不负责存储数据,存储数据是用集合,数组等数据结构。 (2)Stream是不可变,一 ......

streamapi是用来处理数据,处理集合等容器中的数据,处理操作有:查询、筛选、删除、过滤、统计、映射等。
希望能够用类似于sql语法的形式对java内存中的数据进行处理。

stream的特点:
  (1)stream本身不负责存储数据,存储数据是用集合,数组等数据结构。
  (2)stream是不可变,一旦修改,就会产生新的stream对象。stream不会修改数据源的数据。
  (3)stream的操作是一个延迟操作。所有的操作都必须延迟到终结操作时,一起处理。

stream的操作分为三步:

  (1)创建stream流,创建共有四种方式:

    ①使用connection集合创建,connection集合的stream()方法。

    ②使用arrays工具类和数组进行创建,arrays.stream(array).

    ③stream的of方法创建一个有限流,stream.of(t...values)。

    ④stream的generate、iterate方法方法创建无限流,stream.generate(supplier<t> s),stream.iterate(t seed, unaryoperator<t> f)

  (2)对流中的数据进行处理(加工),方法:  

    ①filter(predicate p):过滤
    ②distinct():去重
    ③limit(long maxsize):取有限的几个
       ④skip(long n):跳过n个
    ⑤peek(consumer action) 接收lambda表达式,对流中的每个数据执行lambda体操作
    ⑥sorted():排序,按照自然排序
        sorted(comparator com):排序,按照定制排序
    ⑦map(function f):接收lambda表达式,对流中的每个数据,执行lambda体操作,返回新的数据构成新的流
    ⑧flatmap(function f)

      map(function<? super t,? extends r> mapper) map操作流中的把t对象变成r对象,由r对象构成新的流
      flatmap(function<? super t,? extends stream<? extends r>> mapper)
        flatmap把流中的数据t对象压扁变成一个stream,然后把一个个的stream最后再合成一个大的stream

  (3)对流的结果进行收集(终结),一旦进行终结,不能再对此流进行操作,方法: 

    ①void foreach(consumer ):遍历流中的数据
    ②long count():统计个数
    ③boolean allmatch(predicate p):是否全部满足xx条件
       boolean anymatch(predicate p):是否有一个满足xx条件
       boolean nonematch(predicate  p):是否全部都不满足xx条件
    ④ optional<t> findfirst():返回第一个
      optional<t> findany():返回任意一个
    ⑤optional<t> max(comparator c):找出最大的
      optional<t> min(comparator c) :找出最小的
    ⑥t reduce(t iden, binaryoperator b) 通过反复的运算,留下最后一个结果
      optional<u> reduce(binaryoperator b)
     ⑦r collect(collector c):把流中的数据最后都收集到一起
      collector接口
      biconsumer 抽象方法 void accept(r r,t t)

流创建示例:

1、list<integer> list = arrays.aslist(1,2,3,4,5); =》stream<integer> stream = list.stream();

2、int[] arr = {1,2,3,4,5};=》intstream stream = arrays.stream(arr);

3、stream<integer> stream = stream.of(1,2,3,4,5);

4、stream<double> steream = stream.generate(() -> math.random());//0~1的小数无限流      stream<integer> stream = stream.iterate(1, num -> num+=2);//奇数无限流

流的操作示例:

stream = stream.filter(t -> t%2==0); //等等方法的操作

流结果收集:

stream.foreach(system.out::println);//...等等