Java 8 Stream操作详解:创建、中间与终止步骤
版权申诉
105 浏览量
更新于2024-08-07
收藏 27KB DOCX 举报
Java 8 引入了一种强大的新特性,即Stream,它是一种数据渠道,用于高效地对集合、数组等数据结构进行操作,生成元素序列。Stream 的核心操作分为三个步骤:创建Stream、中间操作和终止操作,这使得处理大量数据变得更加简洁和高效。
一、创建Stream
获取Stream的方式主要有以下几种:
1. 通过Collection系列集合的stream()或parallelStream()方法:这些方法用于从集合对象中创建一个Stream,例如在JUnit测试用例`test11()`中,我们创建了一个从ArrayList生成的String Stream。
```java
@Test
void test11() {
List<String> list = new ArrayList<>();
Stream<String> stringStream = list.stream();
}
```
2. 通过Arrays类的静态方法stream()获取数组流:适用于数组类型的流,如`test11()`中的Person数组。
```java
@Test
void test11() {
Person[] person = new Person[10];
Stream<Person> personStream = Arrays.stream(person);
}
```
3. 使用Stream的静态方法of():用于创建包含指定元素的固定大小Stream,如生成字符串"a", "b", "c"的Stream。
```java
@Test
void test11() {
Stream<String> stream = Stream.of("a", "b", "c");
}
4. 创建无限流:
- 通过iterate()方法:基于初始值和函数生成无限递增序列,如生成0到无穷的整数流。
- 通过generate()方法:根据给定的生成器函数创建无限流,如生成随机数。
```java
@Test
void test11() {
Stream<Integer> integerStream = Stream.iterate(0, x -> x + 2);
// 或
Stream<Integer> randomStream = Stream.generate(() -> Math.random());
}
```
二、中间操作
中间操作是Stream的主要部分,它们不会立即执行,而是推迟到终止操作时才执行,这种特性称为“惰性求值”。常见的中间操作包括:
2.1 筛选与切片
- filter()方法:接受Lambda表达式作为参数,根据条件筛选流中的元素。例如,在`test12()`中,我们过滤出年龄大于18的人。
```java
@Test
void test12() {
List<Person> personList = Arrays.asList(
new Person("Java旅途", 18),
new Person("Java旅途", 20)
);
Stream<Person> personStream = personList.stream()
.filter(e -> e.getAge() > 18);
}
- limit()方法:限制流的长度,只返回指定数量的元素。如限制personList中元素个数为10。
```java
@Test
void test12() {
List<Person> personList = ...;
Stream<Person> personStream = personList.stream()
.limit(10);
}
2.2 其他中间操作:如map()用于转换流中的每个元素,flatMap()用于扁平化嵌套流,sorted()用于排序等,都是在实际需求中常用的中间操作。
通过这些中间操作,我们可以灵活地对流进行预处理和转换,然后在终止操作(如forEach(), collect()等)时获取最终结果,提高了代码的可读性和性能。
总结,Java 8的Stream API提供了一种强大的工具,使得数据处理更加直观和高效。理解并熟练运用Stream的创建、中间操作和终止操作是掌握Java 8流式编程的关键,这对于处理大量数据和优化算法性能具有重要意义。
2020-04-08 上传
2021-05-21 上传
2022-06-10 上传
2023-02-24 上传
2023-06-10 上传
2023-09-04 上传
2023-05-30 上传
2023-05-31 上传
2024-10-09 上传
小兔子平安
- 粉丝: 251
- 资源: 1940
最新资源
- Raspberry Pi OpenCL驱动程序安装与QEMU仿真指南
- Apache RocketMQ Go客户端:全面支持与消息处理功能
- WStage平台:无线传感器网络阶段数据交互技术
- 基于Java SpringBoot和微信小程序的ssm智能仓储系统开发
- CorrectMe项目:自动更正与建议API的开发与应用
- IdeaBiz请求处理程序JAVA:自动化API调用与令牌管理
- 墨西哥面包店研讨会:介绍关键业绩指标(KPI)与评估标准
- 2014年Android音乐播放器源码学习分享
- CleverRecyclerView扩展库:滑动效果与特性增强
- 利用Python和SURF特征识别斑点猫图像
- Wurpr开源PHP MySQL包装器:安全易用且高效
- Scratch少儿编程:Kanon妹系闹钟音效素材包
- 食品分享社交应用的开发教程与功能介绍
- Cookies by lfj.io: 浏览数据智能管理与同步工具
- 掌握SSH框架与SpringMVC Hibernate集成教程
- C语言实现FFT算法及互相关性能优化指南