学习Stream流

本文介绍了Java Stream的概念,它是一种高级迭代器,用于处理数据。Stream支持并行操作,可以通过Fork/Join框架加速处理。文章详细阐述了Stream的基本执行流程,包括数据源转换为流、流的操作及转换回集合,以及如何创建顺序流和并行流。此外,还讨论了从数组、集合、输入流创建Stream的方式,以及生成无限流的方法。最后,提到了Stream的遍历操作,如forEach方法的应用及其限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概述
Stream不是集合元素,不是数据结构并不保存数据,Stream是有关算法和计算的,像是一个高级版本的迭代器Iterator。Stream只要给出对其包含的元素执行什么操作,Stream就会隐式地在内部进行遍历,并给出响应的数据转换。单向不可往复、数据只能遍历一次,遍历过后就使用完毕。
Stream可以并行化操作,Stream的并行操作是依赖Java7中引入的Fork/Join框架拆分任务和加速处理过程,并且允许数据源是无限的。
2.基本的执行流程
使用Stream通常包括3个基本步骤:获取一个数据源source—转换为流—执行操作—获取所想要的结果。每次转换原有的Stream对象,执行结果还是Stream,可以使用串式写法定义多个操作。
-数据源就是原始的数据集合
-将 List 集合转换为 Stream
-针对Stream进行一系列操作,每次操作结束返回还是Stream
-可以将Stream转换回集合类型,也可以直接对其中的元素进行处理
3.创建Stream
流stream可以是顺序的,也可以是并行的。顺序流的操作是在单线程上执行,而并行流是在多线程上并发执行的。
(1)可以使用Arrays.stream将一组数据转换为Stream

Integer[] arr=new Integer[]{3,4,6,8,9,23,232,33,96}; 
long count=Arrays.stream(arr).filter(i->i>20).count();//统计大于20的数据个数

(2)使用Collection.parallelStream使用并行流,处理任务并行执行。前提是硬件支持,也可以使用Collection.stream使用串行流。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6); 
Stream<Integer> stream = list.parallelStream(); 
stream.forEach(System.out::println);

(3)对于基本类型,对应的包装类型Stream:IntStream、LongStream和DoubleStream

//参数类型为int...不确定个数的参数,可以根据参数生成一个stream 
IntStream.of(3, 5, 18, 1, 4).forEach(System.out::println);
//根据指定的返回生成一组连续值,10-20含左含右 
IntStream.rangeClosed(10, 20).forEach(System.out::println);

(4)从输入流中获取数据的方法
可以使用BufferedReader生成stream,把流中的内容一行一行的读取出来。

BufferedReader br = new BufferedReader(new FileReader("input/data.txt")); 
Stream<String> stream=br.lines(); 
stream.forEach(System.out::println);

(5)创建无限流的方法
generate方法可以接收一个参数函数用于创建无限stream
iterate方法可以接收一个参数函数用于创建无限的stream
4.遍历操作
Stream提供了forEach可以迭代流中的每个数据,forEach方法可以接收一个lambda表达式,并且在每个元素上执行该表达式,但是注意不能修改本地变量值,也不能break/return之类的关键字提前结束循环。
随机数的输出前10个值

Random r = new Random(); 
r.ints().limit(10).forEach(System.out::println); 
System.out.println("----------------------"); 
r.ints().limit(10).forEach((tt) -> { 
	if(tt>10) 
		System.out.println(tt); 
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值