Java中Stream流介绍

Java 8引入的Stream API是Java中处理集合的一种高效方式,它提供了一种高级的迭代方式,允许你以声明式方式处理数据。Stream API可以对数据执行复杂的查询操作,而不需要编写冗长且复杂的循环语句。下面是一些使用Stream API的常见场景和示例:

1. 过滤(Filtering)

过滤出满足特定条件的元素。

java 复制代码
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Diana");
List<String> filteredNames = names.stream()
    .filter(name -> name.startsWith("A"))
    .collect(Collectors.toList());
// 结果: ["Alice"]

2. 映射(Mapping)

将元素转换为其他形式或提取信息。

java 复制代码
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Diana");
List<Integer> nameLengths = names.stream()
    .map(String::length)
    .collect(Collectors.toList());
// 结果: [5, 3, 7, 5]

3. 排序(Sorting)

对流中的元素进行排序。

java 复制代码
List<String> names = Arrays.asList("Charlie", "Bob", "Alice", "Diana");
List<String> sortedNames = names.stream()
    .sorted()
    .collect(Collectors.toList());
// 结果: ["Alice", "Bob", "Charlie", "Diana"]

4. 聚合(Aggregating)

对元素进行聚合操作,例如求和、找到最大或最小元素等。

java 复制代码
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
    .reduce(0, Integer::sum);
// 结果: 15

5. 收集(Collecting)

将流转换为其他形式,如列表、集合或映射。

java 复制代码
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Diana");
Set<String> nameSet = names.stream()
    .collect(Collectors.toSet());
// 结果: ["Alice", "Bob", "Charlie", "Diana"] 的集合

6. 并行操作(Parallel Operations)

利用多核处理器的能力自动并行化执行操作。

java 复制代码
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Diana");
List<String> upperCaseNames = names.parallelStream()
    .map(String::toUpperCase)
    .collect(Collectors.toList());
// 结果: ["ALICE", "BOB", "CHARLIE", "DIANA"]

7. 去重(Distinct)

移除流中重复的元素。

java 复制代码
List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 4, 4, 5);
List<Integer> distinctNumbers = numbers.stream()
    .distinct()
    .collect(Collectors.toList());
// 结果: [1, 2, 3, 4, 5]

Stream API通过这些操作提供了处理集合数据的强大工具,使得代码既简洁又易读。特别是在处理大量数据时,利用Stream的并行能力可以显著提高程序的性能。

相关推荐
500了1 小时前
Kotlin基本知识
android·开发语言·kotlin
hong_zc1 小时前
算法【Java】—— 二叉树的深搜
java·算法
进击的女IT2 小时前
SpringBoot上传图片实现本地存储以及实现直接上传阿里云OSS
java·spring boot·后端
Miqiuha2 小时前
lock_guard和unique_lock学习总结
java·数据库·学习
一 乐3 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
不知所云,3 小时前
qt cmake自定义资源目录,手动加载资源(图片, qss文件)
开发语言·qt
数云界3 小时前
如何在 DAX 中计算多个周期的移动平均线
java·服务器·前端
安冬的码畜日常3 小时前
【玩转 JS 函数式编程_006】2.2 小试牛刀:用函数式编程(FP)实现事件只触发一次
开发语言·前端·javascript·函数式编程·tdd·fp·jasmine
阑梦清川3 小时前
Java继承、final/protected说明、super/this辨析
java·开发语言
PythonFun4 小时前
Python批量下载PPT模块并实现自动解压
开发语言·python·powerpoint