stream流只统计某个字段
时间: 2025-05-08 12:55:58 浏览: 26
### 使用Java Stream API对指定字段进行聚合统计
#### 聚合操作概述
Java 8 中引入的 Stream API 提供了一种强大且灵活的方式来处理集合数据。对于需要对特定字段执行聚合统计的任务,Stream API 支持多种方法来完成这一目标[^3]。
#### 统计特定字段的例子
假设有一个 `Person` 类列表,其中包含多个属性如姓名 (`name`) 和年龄 (`age`)。为了计算所有人的总年龄或平均年龄,可以使用如下方式:
```java
import java.util.Arrays;
import java.util.List;
class Person {
private String name;
private int age;
// 构造器、getter和setter省略...
public static List<Person> createRoster() {
return Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Charlie", 35)
);
}
}
public class Main {
public static void main(String[] args) {
List<Person> roster = Person.createRoster();
// 计算所有人年龄之和
int sumOfAges = roster.stream()
.mapToInt(Person::getAge)
.sum();
System.out.println("Sum of ages: " + sumOfAges);
// 或者使用 reduce 方法
Integer totalAgeReduce = roster.stream()
.map(Person::getAge)
.reduce(0, (a, b) -> a + b);
System.out.println("Total Age Reduce: " + totalAgeReduce);
}
}
```
上述代码展示了两种不同的途径来获得人员名单中所有成员年龄加总的值:一种是直接调用 `sum()` 函数;另一种则是采用 `reduce()` 来累积求和[^5]。
#### 平均值和其他统计数据
除了简单的求和外,还可以很容易地扩展到其他类型的统计分析上,比如计算平均年龄:
```java
double averageAge = roster.stream()
.collect(Collectors.averagingInt(Person::getAge));
System.out.println("Average age: " + averageAge);
```
这里使用了收集器(Collectors),它是一个非常有用的工具类,用于将流的结果汇总成最终形式的数据结构或其他数值型结果[^1]。
阅读全文
相关推荐


















