流式编程
Stream作为Java 8的一大亮点,它专门针对集合的各种操作提供各种非常便利,简单,高效的API,Stream API主要是通过Lambda表达式完成,极大的提高了程序的效率和可读性。
流式编程的概念基于函数式编程的思想,旨在简化代码,提高可读性和可维护性。
常见流创建方式
常见流的方法
流的操作方法一般分为:获取流 操作流 结束流
操作流
map map 方法用于映射每个元素到对应的结果
filter filter 方法用于通过设置的条件过滤出元素。
skip skip方法用于跳过指定数量的流。
limit limit 方法用于获取指定数量的流。
sorted sorted 方法用于对流进行排序。
结束流
peek: peek是一个中间操作方法,它接受一个Consumer函数作为参数,对流中的每个元素执行该函数。与forEach不同的是,peek方法会返回一个新的流,该流中的元素和原始流中的元素相同。
流的中间操作是惰性的,如果一个流操作流程中只有中间操作,没有终结操作,那么这个流什么都不会做,整个流程中会一直等到遇到终结操作操作才会真正的开始执行。
forEach forEach来迭代流中的每个数据
聚合操作(reduce 和 collect)
reduce和collect都是Stream API中用于聚合操作的方法,它们可以将流中的元素进行汇总、计算和收集。
Collectors Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素
匹配操作(allMatch(所有)、anyMatch(至少一个) 和 noneMatch(没有一个))是否满足条件 (返回值 true/false)
count min max 统计操作 元素数量 最小值 最大值
查找操作
findFirst 返回流中第一个元素
findAny 返回流中任意一个元素
Stream 对象是一种一次性使用的对象,它只能被消费一次。一旦对 Stream 执行了终止操作(如收集结果、遍历元素),Stream 就会被关闭,后续无法再使用。
并行流
并行流是 Java 8 Stream API 中的一个特性。它可以将一个流的操作在多个线程上并行执行,以提高处理大量数据时的性能。
parallel() 顺序流转换为并行流
使用并行流要注意线程安全问题
在某些操作中性能并不好(如: sorted)