说说Java 8 引入的Stream API

介绍背景

Stream API,这是一种高效、易于使用的数据处理方式,它可以极大提高程序员对集合数据操作的效率和便利性。

1. Stream的基本概念 

Java Stream是一种数据流,它可以用于对集合、数组或者其他支持的数据源进行批量操作。它不是数据结构,不存储数据,而是提供了对数据进行计算的各种操作。流的操作分为中间操作(Intermediate Operations)和终端操作(Terminal Operations)。中间操作不会执行任何处理,直到遇到终端操作才会开始处理并得出最终结果。

2. 创建Stream 

可以通过Collection系列接口的stream()或parallelStream()方法从集合创建Stream,也可以使用Arrays.stream()方法从数组创建Stream。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();

3. 中间操作 

中间操作如filter(), map(), sorted()等,它们会返回一个新的Stream,不会改变原有的Stream。

// 筛选出大于3的数
Stream<Integer> filteredStream = list.stream().filter(i -> i > 3);

4. 终端操作 

终端操作如forEach(), collect(), count(), findFirst()等,它们会触发流的计算并得出结果或者消费掉流。一旦执行了终端操作,Stream就无法再被使用。

// 打印出所有大于3的数
list.stream().filter(i -> i > 3).forEach(System.out::println);

// 计算大于3的数的数量
long count = list.stream().filter(i -> i > 3).count();

5. 聚合操作 

collect()是一个常见的终端操作,常用于将流转换为集合、数组或其他形式的结果。

// 将大于3的数收集到新的List中
List<Integer> newlist = list.stream().filter(i -> i > 3).collect(Collectors.toList());

6. 并行流 

Java 8还引入了并行流(Parallel Streams),可以在多核处理器上充分利用硬件资源,提高处理大数据集时的性能。

// 使用并行流统计所有大于3的数
long parallelCount = list.parallelStream().filter(i -> i > 3).count();

并行流的使用方法和串行流基本相同,只需要在流的创建时通过 parallel() 方法将串行流转换为并行流即可,在并行流操作中,需要注意以下几点:

  • 线程安全性:并行流的操作是线程安全的,不需要程序员显式地进行同步操作。
  • 适用性:并行流适用于数据量较大、处理时间较长的情况,可以充分利用多核处理器的性能优势。
  • 性能考量:尽管并行流可以加速处理过程,但在某些情况下并行流的性能可能会比串行流更差,特别是在数据量较小或者操作过程中存在大量的同步开销时。因此,需要根据实际情况评估是否使用并行流操作。
  • 39
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值