Java 1.8新特性:Stream流与Lambda表达式
32 浏览量
更新于2024-08-29
收藏 78KB PDF 举报
Set set = new HashSet<>();
Stream stream = set.stream();
// 通过Map获取Stream流对象
Map map = new HashMap<>();
Stream<Map.Entry> entryStream = map.entrySet().stream();
// 通过数组获取Stream流对象
Integer[] arr = {1, 2, 3};
Stream<Integer> integerStream = Arrays.stream(arr);
Stream流的操作分为三个阶段:中间操作、终端操作和短路操作。
1. 中间操作(Intermediate Operations):
- `filter`: 过滤出满足条件的元素。
- `limit`: 限制流中元素的数量。
- `map`: 将每个元素转换为另一个对象。
- `sorted`: 对流中的元素进行排序。
- `skip`: 跳过前n个元素。
- `distinct`: 去除重复的元素。
2. 终端操作(Terminal Operations):
- `forEach`: 遍历并执行指定操作,通常用于打印或执行副作用。
- `count`: 计算流中元素的数量。
- `collect`: 将流转换为其他数据结构,如列表、集合或映射。
- `findFirst`/`findAny`: 查找流中的第一个或任意一个元素。
- `reduce`: 对流中的元素进行累积操作,例如求和、求最大值等。
3. 短路操作(Short-Circuiting Operations):
- `anyMatch`/`allMatch`/`noneMatch`: 检查流中是否存在满足条件的元素,一旦找到即可返回结果,无需遍历所有元素。
- `findFirst`/`findAny`: 当找到第一个元素时,短路操作结束。
Stream流可以连接多个中间操作,形成一条流水线。这些操作会在遇到终端操作时一次性执行,这种延迟计算特性称为“惰性求值”。这使得在处理大量数据时,可以有效地节省内存和计算资源。
Stream流的并行与串行:
- 串行流(Sequential Stream):操作按顺序逐个执行,适合于CPU密集型任务。
- 并行流(Parallel Stream):利用多核CPU的并行处理能力,将任务拆分成子任务并行执行,提高效率。可以使用`.parallel()`方法将串行流转换为并行流。
在实际开发中,Stream流广泛应用于数据过滤、转换、聚合等场景,结合Lambda表达式,可以使代码更加简洁、易读。例如,从一个列表中找出所有偶数:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
```
这个例子展示了如何通过Stream流的`filter`方法过滤出偶数,再用`collect`方法将结果收集到一个新的列表中。通过这种方式,代码更接近自然语言,提高了代码的可读性和可维护性。
Java 8引入的Stream API极大地丰富了对集合的操作,使得开发者可以更高效地处理数据,尤其在大数据量处理和并发编程中,Stream流的性能优势更为显著。学习和熟练掌握Stream流的使用,对于提升Java编程能力至关重要。
2023-07-12 上传
2020-08-26 上传
点击了解资源详情
2021-06-07 上传
2014-05-03 上传
2021-04-13 上传
2014-06-21 上传
点击了解资源详情
weixin_38739950
- 粉丝: 8
- 资源: 917
最新资源
- ist的matlab代码-csharp_samples_algo_creditcardchecker-template:csharp_samp
- lab-express-cinema-ironlauncher
- maze-solver-python:Python迷宫求解器
- PSO_swarm_noticetit_PSO_zip_
- springboot216新闻资讯系统_rar.zip
- avita-sc101-android-app:从蓝牙体重秤读取测量值的 Android 应用程序
- RecSystem:一个网站,一个推荐系统
- Color Runner-crx插件
- ch02_python_
- tic-tac-toe:井字游戏使用react
- ansible-role-alertmanager
- springboot145基于java的在线问卷调查系统的设计与实现_rar.zip
- redissen:带有 JavaScript 便捷 API 的原生 Redis 驱动程序包装器
- Phishing_detection_based_on_heuristic_features:基于启发式特征的钓鱼网站检测系统
- node-jpickle:适用于Python的pickle格式的全JavaScript解析器
- portfolio-nextjs:Portfolio-nextjs