
lamdba03 Java8新特性之四:Stream API
创建Stream:从数据源(如集合、数组)获取Stream对象。 中间操作:通过多个方法对Stream进行筛选、切片、映射等操作。 终止操作:执行中间操作并产生最终结果。
流的关闭:在使用资源密集型操作时,建议将Stream及时关闭。 并行Stream:通过
发布日期:2021-05-08 03:02:37
浏览次数:32
分类:精选文章
本文共 1884 字,大约阅读时间需要 6 分钟。
Java 8 Stream API入门与实践指南
Java 8的Stream API是处理集合操作的革命性改变,它通过提供一种灵活且高效的方式来操作数据集合。这一特性不仅简化了代码,还提高了性能,特别是在处理大数据量时表现尤为突出。本文将从基础到应用,全面探讨Stream API的功能和使用方法。
Stream的操作步骤
Stream API的核心在于分三步完成操作:
Stream的基本用法示例
创建Stream
ListpersonList = new ArrayList<>();// 初始化人对象personList.add(new Person("欧阳雪", 18, "中国", 'F'));// 其他对象初始化类似...
基本操作
过滤操作
// 过滤年龄大于18岁的人并输出personList.stream().filter(t -> t.getAge() > 20).forEach(t -> System.out.println(t));
统计操作
// 计算中国人的数量long chinaCount = personList.stream().filter(t -> "中国".equals(t.getCountry())).count();System.out.println(chinaCount);
Stream中间操作
筛选与切片
filter
:基于条件筛选元素。limit
:限制流的大小。skip
:跳过指定数量的元素。distinct
:去重。
映射操作
map
:将元素映射为另一个对象。flatMap
:将元素映射为另一个Stream。
排序操作
// 按年龄从小到大排序,年龄相同则按姓名排序personList.stream().sorted((o1, o2) -> { if (o1.getAge() == o2.getAge()) { return o1.getName().compareTo(o2.getName()); } return o1.getAge() - o2.getAge();}).forEach(System.out::println);
终止操作
查找与匹配
anyMatch
:检查是否存在满足条件的元素。allMatch
:检查所有元素是否满足条件。findFirst
:返回第一个匹配元素。findAny
:返回任意一个匹配元素。
统计操作
count
:返回元素总数。max
、min
:返回最大值、最小值。
归约操作
reduce
:将流中的元素结合起来,得到一个值。
实际应用示例
求年龄之和
// 将年龄转换为整数流并求和int ageSum = personList.stream() .map(Person::getAge) .reduce((t, u) -> t + u);System.out.println(ageSum);
求平均年龄
// 使用平均值计算器double averageAge = personList.stream() .collect(Collectors.averagingDouble(t -> t.getAge()));System.out.println(averageAge);
求最大年龄
// 使用最大值收集器OptionalmaxAgePerson = personList.stream() .collect(Collectors.maxBy((o1, o2) -> o1.getAge() - o2.getAge()));System.out.println(maxAgePerson.get().getName());
注意事项
parallelStream()
可以提升性能,但需谨慎处理状态和共享变量。总结
Stream API为Java程序员提供了一种强大的数据处理工具,简化了代码逻辑并提高了效率。通过合理运用filter
、map
、sorted
等中间操作,以及count
、reduce
等终止操作,可以实现复杂的数据处理任务。希望本文能为您提供深入的理解和实践指导!