Java Stream流操作

开始操作

stream():创建出一个新的stream串行流对象

parallelStream():创建出一个可并行执行的stream流对象

Stream.of():通过给定的一系列元素创建一个新的Stream串行流对象

中间操作

filter():按照条件过滤符合要求的元素, 返回新的stream流

map():将已有元素转换为另一个对象类型,一对一逻辑,返回新的stream流

flatMap():将已有元素转换为另一个对象类型,一对多逻辑,即原来一个元素对象可能会转换为1个或者多个新类型的元素,返回新的stream流

limit():仅保留集合前面指定个数的元素,返回新的stream流

skip():跳过集合前面指定个数的元素,返回新的stream流

concat():将两个流的数据合并起来为1个新的流,返回新的stream流

distinct():对Stream中所有元素进行去重,返回新的stream流

sorted():对stream中所有的元素按照指定规则进行排序,返回新的stream流

peek():对stream流中的每个元素进行逐个遍历处理,返回处理后的stream流

结束操作

count():返回stream处理后最终的元素个数

max():返回stream处理后的元素最大值

min():返回stream处理后的元素最小值

findFirst():找到第一个符合条件的元素时则终止流处理

findAny():找到任何一个符合条件的元素时则退出流处理,这个对于串行流时与findFirst相同,对于并行流时比较高效,任何分片中找到都会终止后续计算逻辑

anyMatch():返回一个boolean值,类似于isContains(),用于判断是否有符合条件的元素

allMatch():返回一个boolean值,用于判断是否所有元素都符合条件

noneMatch():返回一个boolean值, 用于判断是否所有元素都不符合条件

collect():将流转换为指定的类型,通过Collectors进行指定toArray()将流转换为数组

iterator():将流转换为Iterator对象

foreach():无返回值,对元素进行逐个遍历,然后执行给定的处理逻辑

map 与 flatMap

都是用于转换已有的元素为其他元素,区别点在于:

  • map 必须是一对一的,即每个元素都只能转换为1个新的元素
  • flatMap 可以是一对多的,即每个元素都可以转换为1个或者多个新的元素

flatMap操作其实是每个元素处理返回一个Stream,然后多个Stream展开合并,变成一个新的Stream。

peek 与 foreach

都是对元素逐个遍历然后逐个进行处理,区别:

  • Peek 属于中间方法,只能作为管道中途的一个处理步骤,不会直接执行得到结果
  • foreach 属于无返回值的终止方法,可以直接执行相关操作

一旦一个Stream被执行了终止操作之后,后续不可以再读这个流执行其他的操作,否则会报错。

Collect的一些操作

collect、Collector、Collectors的区别与关联
  • collect 是Stream流的一个终止方法,会使用传入的收集器(入参)对结果执行相关的操作,这个收集器必须是Collector接口的某个具体实现类
  • Collector 是一个接口,collect方法的收集器是Collector接口的具体实现类
  • Collectors 是一个工具类,提供了很多的静态工厂方法,提供了很多Collector接口的具体实现类,是为了方便程序员使用而预置的一些较为通用的收集器(如果不使用Collectors类,而是自己去实现Collector接口,也可以)。
恒等处理

Stream 的元素在经过Collector处理后券后完全不变,比如 toList()

归约汇总

对元素逐个遍历,会与上一个元素的处理结果进行合并处理,并得到一个新的结果,以此类推,直到遍历完成后,输出最终的结果

数字相加、最大值等等

分组分区

groupingBy 方法,需要两个关键输入:分组函数值收集器

  • 分组函数:一个处理函数,用于基于指定的元素进行处理,返回一个用于分组的值(即分组结果 HashMap的Key值),对于经过此函数处理后返回值相同的元素,将被分配到同一个组里。
  • 值收集器:对于分组后的数据元素的进一步处理转换逻辑,此外还是一个常规的Collector收集器,和collect() 方法中传入的收集器完全等同。

对于 groupingBy 方法,两个都是必须的,但是其中一个重载方法可以只传入一个 分组函数,是因为分组函数默认使用了 toList() 方法。

你可能感兴趣的:(javastream)