欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Java函数式编程魔法:Stream API的10种妙用

Java函数式编程魔法:Stream API的10种妙用

2025/4/19 18:05:41 来源:https://blog.csdn.net/weixin_59997843/article/details/147197682  浏览:    关键词:Java函数式编程魔法:Stream API的10种妙用

在Java 8中引入的Stream API为函数式编程提供了一种全新的方式。它允许我们以声明式的方式处理数据集合,使代码更加简洁、易读且易于维护。本文将介绍Stream API的10种妙用,帮助你更好地理解和应用这一强大的工具。

1. 过滤操作:筛选符合条件的元素

java

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream().filter(name -> name.startsWith("A")).collect(Collectors.toList());
System.out.println(filteredNames); // 输出: [Alice]
2. 映射转换:将元素转换为另一种形式

java

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<Integer> nameLengths = names.stream().map(String::length).collect(Collectors.toList());
System.out.println(nameLengths); // 输出: [5, 3, 7, 5]
3. 排序操作:对流中的元素进行排序

java

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> sortedNames = names.stream().sorted().collect(Collectors.toList());
System.out.println(sortedNames); // 输出: [Alice, Bob, Charlie, David]
4. 收集操作:将流转换为集合

java

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
Set<String> nameSet = names.stream().collect(Collectors.toSet());
System.out.println(nameSet); // 输出: [Alice, Bob, Charlie, David]
5. 去重操作:去除重复元素

java

List<Integer> numbers = Arrays.asList(1, 2, 2, 3, 4, 4, 5);
List<Integer> distinctNumbers = numbers.stream().distinct().collect(Collectors.toList());
System.out.println(distinctNumbers); // 输出: [1, 2, 3, 4, 5]
6. 限制和跳过元素:获取或跳过指定数量的元素

java

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eve");
List<String> limitedNames = names.stream().limit(3).collect(Collectors.toList());
System.out.println(limitedNames); // 输出: [Alice, Bob, Charlie]List<String> skippedNames = names.stream().skip(2).collect(Collectors.toList());
System.out.println(skippedNames); // 输出: [Charlie, David, Eve]
7. 匹配与统计:检查元素是否满足条件

java

List<Employee> employees = Arrays.asList(new Employee("Alice", 6000),new Employee("Bob", 4500),new Employee("Charlie", 7000)
);boolean hasHighEarner = employees.stream().anyMatch(emp -> emp.getSalary() > 6000);
System.out.println(hasHighEarner); // 输出: trueboolean allHigh = employees.stream().allMatch(emp -> emp.getSalary() > 5000);
System.out.println(allHigh); // 输出: falseboolean noLowEarner = employees.stream().noneMatch(emp -> emp.getSalary() < 4000);
System.out.println(noLowEarner); // 输出: true
8. 查找元素:获取第一个或任意一个元素

java

Optional<Employee> firstEmp = employees.stream().sorted(Comparator.comparing(Employee::getName)).findFirst();
System.out.println(firstEmp); // 输出: Optional[Employee{name='Alice', salary=6000}]Optional<Employee> anyEmp = employees.parallelStream().filter(emp -> emp.getSalary() > 5000).findAny();
System.out.println(anyEmp); // 输出: 可能返回 Alice 或 Charlie
9. 并行流:利用多核处理器提高性能

java

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> doubledNumbersParallel = numbers.parallelStream().map(n -> n * 2).collect(Collectors.toList());
System.out.println(doubledNumbersParallel); // 输出: [2, 4, 6, 8, 10]
10. 流的连接:合并两个流

java

Stream<String> stream1 = Stream.of("A", "B", "C");
Stream<String> stream2 = Stream.of("D", "E", "F");
Stream<String> concatenatedStream = Stream.concat(stream1, stream2);
concatenatedStream.forEach(System.out::println);
// 输出:
// A
// B
// C
// D
// E
// F

总结

Stream API为Java开发者提供了一种强大而简洁的方式来处理数据集合。通过上述10种妙用,我们可以看到Stream API在过滤、映射、排序、收集、去重、限制、跳过、匹配、统计、查找和并行处理等方面的应用。希望本文能帮助你更好地理解和应用Stream API,提升你的编程效率和代码质量。

操作类型示例代码说明
过滤filter(name -> name.startsWith("A"))筛选符合条件的元素
映射map(String::length)将元素转换为另一种形式
排序sorted()对流中的元素进行排序
收集collect(Collectors.toSet())将流转换为集合
去重distinct()去除重复元素
限制limit(3)获取前3个元素
跳过skip(2)跳过前2个元素
匹配anyMatch(emp -> emp.getSalary() > 6000)检查是否存在符合条件的元素
查找findFirst()获取第一个元素
并行流parallelStream()利用多核处理器提高性能
流的连接Stream.concat(stream1, stream2)合并两个流

通过这些操作,Stream API使处理数据集合变得更加简单和高效。希望这些示例能帮助你在实际开发中更好地应用Stream API。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词