Stream分组后取值
时间: 2024-12-06 12:33:10 浏览: 13
Spring Cloud Stream分区分组原理图解
Stream API在Java 8及以上版本中引入,它提供了一种处理集合数据的强大工具。当你想要对集合进行分组并获取每个组内的特定元素时,可以使用`collect()`方法结合`Collectors.groupingBy()`函数。
`groupingBy()`函数用于将数据按照某个键值进行分组,返回的是一个Map,其中键是分组的依据,值是一个包含相应键值对应元素的列表或自定义收集者(如`Collectors.toList()`、`Collectors.toSet()`等)。
例如,如果你有一个学生列表,你想按年龄分组然后获取每个年龄段的学生平均成绩,你可以这样做:
```java
List<Student> students = ...; // 学生列表
Map<Integer, List<Student>> groupedStudents = students.stream()
.collect(Collectors.groupingBy(Student::getAge)); // 按年龄分组
// 然后遍历map获取每个年龄段及其平均成绩
for (Map.Entry<Integer, List<Student>> entry : groupedStudents.entrySet()) {
int age = entry.getKey();
double averageScore = entry.getValue().stream()
.mapToDouble(Student::getScore) // 获取所有学生的分数
.average() // 计算平均值
.orElse(0); // 如果没有学生,返回0作为默认值
System.out.println("Age " + age + ": Average Score is " + averageScore);
}
```
阅读全文