collectors.groupingBy
时间: 2023-09-06 11:13:42 浏览: 98
groupingBy 是 Java 8 中 `Collectors` 类的一个静态方法,用于根据指定的分类条件对元素进行分组。它接受一个 `Function` 参数,该参数将元素映射为分组的依据,然后返回一个 `Collector` 对象,该对象用于对元素进行分组操作。
例如,如果我们有一个包含学生对象的列表,并且想根据学生的年级进行分组,我们可以使用 `groupingBy` 方法来实现:
```java
List<Student> students = ... // 学生列表
Map<Grade, List<Student>> studentsByGrade = students.stream()
.collect(Collectors.groupingBy(Student::getGrade));
```
在上面的示例中,`Student` 类具有一个 `getGrade` 方法,该方法返回学生的年级。`groupingBy` 方法通过传递 `Student::getGrade` 方法引用作为参数来将学生对象按照年级进行分组。最终的结果是一个 `Map` 对象,其中键是年级,值是相应年级的学生列表。
除了单个分类条件外,`groupingBy` 方法还支持多级分组、指定分组后的结果类型以及对每个组进行进一步操作等功能。更多关于 `groupingBy` 方法的详细信息可以参考 Java 官方文档。
相关问题
Collectors.groupingBy
Collectors.groupingBy是Java 8中的一个收集器(Collector),用于对元素进行分组。它接受一个Function参数,该参数将元素映射到分组的键值上。例如,假设你有一个Person类,其中包含姓名和年龄属性。你可以使用Collectors.groupingBy将Person对象按年龄分组:
```java
List<Person> people = Arrays.asList(
new Person("Alice", 25),
new Person("Bob", 30),
new Person("Charlie", 25),
new Person("David", 30)
);
Map<Integer, List<Person>> peopleByAge = people.stream()
.collect(Collectors.groupingBy(Person::getAge));
```
在这个例子中,peopleByAge是一个Map<Integer, List<Person>>,其中键是年龄,值是那些年龄相同的Person对象的列表。如果打印出这个Map,将会得到以下输出:
```
{
25=[Person{name='Alice', age=25}, Person{name='Charlie', age=25}],
30=[Person{name='Bob', age=30}, Person{name='David', age=30}]
}
```
collectors.groupingby
`Collectors.groupingBy` 是 Java 8 中的一个静态工厂方法,用于将流中的元素分组并归纳为 `Map` 类型。它需要两个参数:第一个参数是用于分组的键的函数,第二个参数是用于统计组中元素的函数。
示例代码:
```
List<Person> people = ...
Map<String, List<Person>> peopleByCity = people.stream()
.collect(Collectors.groupingBy(Person::getCity));
```
这段代码将根据`Person`类中的getCity方法的返回值来分组,每组对应一个List<Person>,并转化成Map<String,List<Person>>.
阅读全文