Java 8教程:Stream API深度解析与集合处理

0 下载量 37 浏览量 更新于2024-09-01 收藏 105KB PDF 举报
"Java 8新特性教程,主要聚焦在使用Stream API处理集合,包括如何通过流遍历集合,从集合和数组创建流,以及如何聚合流的值。作者已经在先前的文章中介绍了Lambda表达式和方法引用在遍历、过滤集合中的应用。完整的示例代码可以在作者的GitHub上找到。本文将详细讲解Stream API的基础操作,如创建流和执行流操作。" 在Java 8中,Stream API引入了一个全新的处理数据的方式,它允许开发者以一种声明性风格处理集合,提高了代码的可读性和效率。流不是集合,它们是用于处理数据的工具,可以对集合进行一系列操作,如过滤、映射、排序和聚合。 1. 使用流来遍历集合 在Java 8中,可以使用`forEach`方法轻松地遍历集合。例如,上述代码中展示了如何创建一个包含`Person`对象的列表,然后使用`Predicate`接口定义一个年龄大于65岁的条件。`displayPeople`方法通过`forEach`遍历列表,对于满足条件的元素,打印出来。 ```java people.forEach(p -> { if (pred.test(p)) { System.out.println(p.getName()); } }); ``` 这里的`forEach`就是使用流遍历集合的一个例子,它接受一个lambda表达式,对集合中的每个元素执行该表达式。 2. 从集合或数组创建流 要从集合或数组创建流,可以调用集合的`stream()`或`parallelStream()`方法。例如,`people.stream()`会返回一个表示`people`列表的串行流,而`people.parallelStream()`则返回并行流,适合于并行处理大量数据。 3. 聚合流中的值 Stream API提供了多种聚合操作,如`count()`计算元素数量,`findFirst()`找到第一个元素,`anyMatch()`检查是否存在匹配条件的元素,`reduce()`执行累积操作等。例如,要找出列表中所有人的总年龄,可以使用`reduce`方法: ```java int totalAge = people.stream() .mapToInt(Person::getAge) .sum(); ``` 这里首先使用`mapToInt`将`Person`流转换为`IntStream`,然后通过`sum`方法计算总和。 Stream API的另一个强大功能是`collect`操作,它可以用于将流转换为其他结构,如列表、映射或特定的聚合结果。例如,收集所有年龄大于65岁的人名到一个新的列表: ```java List<String> namesOver65 = people.stream() .filter(pred) .map(Person::getName) .collect(Collectors.toList()); ``` 这段代码首先过滤出年龄大于65的人,再映射到他们的名字,最后通过`Collectors.toList()`将结果收集到一个新的列表中。 Java 8的Stream API提供了一种高效且易读的方式来处理集合,它简化了数据处理的复杂性,使代码更简洁,更易于理解。通过使用流,开发者可以更好地利用多核处理器的并行处理能力,提高程序性能。了解和熟练掌握Stream API是提升Java编程能力的重要步骤。