Stream流操作集合
使用Stream操作集合
1、什么是Stream
Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。
特性:
- stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果。
- stream不会改变数据源,通常情况下会产生一个新的集合或一个值。
- stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行。
2、创建方式
1.通过java.util.Collection.stream()方式用集合创建流
/**
* 通过java.util.Collection.stream()方式创建
*/
@Test
public void CreateStream1(){
//将数组转化成集合
List<String> list= Arrays.asList("a","b","c");
//创建一个顺序流
Stream<String> stream = list.stream();
stream.forEach(System.out::println);
//创建一个并行流
Stream<String> stringStream = list.parallelStream();
stringStream.forEach(System.out::println);
}
注: stream和parallelStream的区别:
stream是顺序流,由主线程按顺序对流执行操作,而parallelStream是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求。
ParallelStream
对于ParallelStream,需要知道的是里面的执行是异步的,并且使用的线程池是ForkJoinPool.common,可以通过设置-Djava.util.concurrent.ForkJoinPool.common.parallelism = N来调整线程池的大小;
ParallelStream的作用
Stream具有平行处理能力,处理的过程会分而治之,也就是将一个大任务切分成多个小任务,这表示每个任务都是一个操作,因此像以下的程式片段:
顺序流转换并行流
Optional<Integer> findFirst = list.stream().parallel().filter(x->x>6).findFirst();
2.通过java.util.Arrays.stream(T[] array)方式用数组创建流
/**
* 通过java.util.Arrays.stream(T[] array)方式创建
*/
@Test
public void CreateStream2(){
//将数组转化成集合
int[] array={1,2,3,5,6};
IntStream stream = Arrays.stream(array);
}
3.通过Stream的静态方法:of(),iterate(),generate()
/**
* ###### 通过Stream的静态方法:of(),iterate(),generate()方式创建
*/
@Test
public void CreateStream3(){
Stream<Integer> integerStream = Stream.of(1, 4, 3, 8, 6, 7);
Stream<Integer> limit = Stream.iterate(0, (x) -> x + 3).limit(4);
limit.forEach(System.out::println);
Stream<Double> limit1 = Stream.generate(Math::random).limit(3);
limit1.forEach(System.out::println);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南