关于java:Java-Stream流操作

254次阅读

共计 1882 个字符,预计需要花费 5 分钟才能阅读完成。

开始操作

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() 办法。

正文完
 0