一、Java 8 Stream 简介和创建使用

Java8引入的StreamAPI提供了处理集合的新方式,它不存储数据,而是通过延迟执行的操作对数据源进行计算。Stream是惰性求值的,支持函数式编程风格,简化了并行处理。创建Stream可以通过集合、数组或Stream的静态方法。文章还展示了如何使用中间操作(如filter)和终止操作(如forEach、findFirst)来处理数据。
摘要由CSDN通过智能技术生成

1.Java 8 流

Stream 是Java 8 中处理集合的关键抽象概念,可以将元素集合看出一种流,对流进行操作,,Stram API提供了一种高效且易于使用的处理数据方式。


 - stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果。
 - stream不会改变数据源,通常情况下会产生一个新的集合或一个值。
 - stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行。

1.代码简洁:函数编程写出的代码简洁且意图明确,使用stream接口让你从此告别for循环。
2.多核友好:Java函数式编程使得编写并行程序从未如此简单,你需要的全部就是调用一下方法。
3.Stream不存储数据
4.Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream。
5.Stream是惰性求值的(延迟执行)

2.Stream创建

1.创建 Stream
一个数据源(如: 集合、数组), 获取一个流。
2.中间操作
一个中间操作链,对数据源的数据进行处理。
3.终止操作(终端操作)
一个终止操作,执行中间操作链,并产生结果 。

2.1通过java.util.Collection.stream()方法用于集合创建流

List<String> list = new ArrayList<>();
//获取一个顺序流
Stream<String> stream = list.stream();
//获取一个并行流
Stream<String> parallelStream = list.parallelStream();

2.2使用java.util.Arrays.stream(T[] array)

int[] array = {1, 3, 5, 7, 9};
IntStream stream = Arrays.stream(array);

2.3使用Stream的静态方法:of()、iterate()、generate()

产生一个元素为给定值的流
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
stream.forEach(System.out::println);

产生一个无限流,在第一个值基础上,调用函数产生的值
Stream<Integer> stream2 = Stream.iterate(0, (x) -> x + 3).limit(4);
stream2.forEach(System.out::println);

产生一个无限流,它的值是通过反复调用函数而构成的
Stream<Double> stream3 = Stream.generate(Math::random).limit(3);
stream3.forEach(System.out::println);

3.Stream流程

1)第一步:把集合转换为流stream
2)第二步:操作stream流
stream流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果
获取一个数据源(source)→ 数据转换→执行操作获取想要的结果。

4.Stream的使用

(foreach/find/match)操作

List<Integer> listNum = Arrays.asList(1, 2, 3, 8, 9, 5, 7);

// 遍历输出符合条件的元素
listNum.stream().filter(x -> x > 7).forEach(System.out::println);
// 符合条件的元素匹配第一个
Optional<Integer> findFirst = listNum.stream().filter(x -> x > 7).findFirst();
// 符合条件的元素匹配任意(适用于并行流)
Optional<Integer> findAny = listNum.parallelStream().filter(x -> x > 7).findAny();
// 是否包含符合特定条件的元素
boolean anyMatch = listNum.stream().anyMatch(x -> x > 7);
System.out.println("匹配第一个值:" + findFirst.get());
System.out.println("匹配任意一个值:" + findAny.get());
System.out.println("是否存在大于6的值:" + anyMatch);

//结果
8
9
匹配第一个值:8
匹配任意一个值:9
是否存在大于6的值:true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值