stream group by map
时间: 2024-06-05 14:05:40 浏览: 139
Stream API在Java中是一种用于处理集合数据的强大工具,特别是对于那些需要并行操作或者实时处理大量数据的情况。`group by`和`map`是Stream API中的两个重要操作,它们结合起来可以实现对数据的分组和转换。
**1. Group By:**
`group by`操作用于将一组元素按照某个键值(属性)进行分组,返回的结果是一个键-值对的映射(Map),其中键是元素的分组依据,值是具有相同键的元素列表。例如:
```java
List<Person> people = ...; // 假设Person有一个名为"name"的属性
Map<String, List<Person>> groupedPeople = people.stream()
.collect(Collectors.groupingBy(Person::getName));
```
这里,`groupedPeople`会是一个Map,键是每个人的名字,值是具有相同名字的人的列表。
**2. Map:**
`map`操作则应用于每个分组后的值列表(即List)。它可以应用一个函数或方法,对每个元素进行转换,生成新的值。例如,如果我们想计算每个名字的人的年龄总和:
```java
Map<String, Long> ageSums = groupedPeople.entrySet().stream()
.map(entry -> new AbstractMap.SimpleEntry<>(entry.getKey(), entry.getValue().stream()
.mapToInt(Person::getAge).sum()))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
```
在这里,`mapToInt`将每个人的年龄转换为整数流,然后用`sum`计算总和。
**相关问题:**
1. `group by`操作在实际开发中有哪些常见的应用场景?
2. 在使用`map`操作时,如何确保转换函数的正确性?
3. 如何结合`reduce`或`collect`操作来进一步处理`group by`后的结果?
阅读全文