当前位置: 首页 > 后端技术 > Java

JavaStream流操作

时间:2023-04-02 01:58:11 Java

开始操作stream():创建一个新的stream串行流对象parallelStream():创建一个可以并行执行的stream流对象Stream.of():通过给定的一系列元素创建一个新的Stream串行流对象中间操作filter():根据条件过滤满足要求的元素,返回一个新的流streamflatMap():将一个已有元素转换为另一种对象类型,一对多逻辑,即一个原始元素对象可能被转换为一个或多个新类型的元素,并返回一个新的streamstreamlimit():只保留集合前面指定数量的元素,并返回一个新的流streamskip():跳过集合前面指定数量的元素,并返回一个新的流streamconcat():合并的数据将两个流合为一个Newstream,返回一个新的streamstreamdistinct():去重Stream中的所有元素,并返回一个新的streamstreamsorted():将stream中的所有元素按照指定的规则排序,并返回一个新的streamstreampeek():逐一遍历流中的每一个元素,返回处理后的流结束操作count():返回流处理后最终的元素个数max():返回流处理后元素的最大值min():返回流处理后元素的最小值findFirst():当找到第一个满足条件的元素时,结束流处理findAny():当找到任意一个满足条件的元素时,流处理结束exited,这个对于串行流来说和findFirst一样,对于并??行流来说效率更高,在任何一个fragment中找到都会终止后续的计算逻辑。anyMatch():返回一个boolean值,类似于isContains(),用于判断是否有符合条件的元素boolean值,用于判断是否所有元素都满足条件noneMatch():返回一个boolean值,用于判断是否所有元素不满足条件collect():将流转为指定类型,通过Collectors指定toArray()将流转为数组iterator():将流转为Iterator对象foreach():无返回值,逐一遍历元素,然后执行给定的处理逻辑map和flatMap用于转换有些元素是其他元素,不同的是:map必须是一对一的,即每个元素只能转换为1个新元素flatMap可以是一对多的,即每个元素都可以转换为1对一个或多个新元素的flatMap操作,其实就是对每个元素进行处理,返回一个Stream,然后将多个Streams展开合并成为一个新的Stream。Peek和foreach都是一个一个遍历元素,然后一个一个处理。不同点:Peek属于中间方法,只能作为管道中间的一个处理步骤,不会直接执行得到结果。foreach是一个没有返回值的终止方法,可以直接进行相关操作。Stream一旦终止,以后就不能读取和执行其他操作,否则会报错。Collect的一些操作collect、Collector、Collectors的区别与关联Collect是Stream的一个终止方法,会使用传入的收集器(入参)对结果进行相关操作。此收集器必须是收集器接口。具体实现类Collector是一个接口,collect方法的收集器是Collector接口的具体实现类。Collectors是一个工具类,提供了很多静态工厂方法和很多Collector接口的具体实现类,方便程序员使用。并且预置了一些更通用的收集器(如果不用Collectors类,自己实现Collector接口也可以)。身份处理Stream的元素经过Collector处理后完全不变。例如toList()对元素进行逐一缩减汇总,并与上一个元素的处理结果合并,得到新的结果。以此类推,直到遍历完成,输出最终的结果数相加,最大值等。分组和分区groupingBy方法需要两个关键输入:分组函数和值收集器。Processing,返回一个值进行分组(即分组结果HashMap的Key值),经过该函数处理后返回相同值的元素将被分配到同一组中。值收集器:对于分组后的数据元素的进一步处理和转换逻辑,也是一个常规的Collector收集器,与collect()方法中传入的收集器完全一样。对于groupingBy方法,两者都是必须的,但是其中一个重载方法只能传入一个分组函数,因为分组函数默认使用toList()方法。