📅  最后修改于: 2023-12-03 15:16:21.821000             🧑  作者: Mango
在Java 8中,我们可以使用流(Stream)和收集器(Collectors)来对数据进行处理和统计。其中,收集器(Collectors)是用于将流(Stream)中的元素转化为集合,该集合可以是List、Set、Map等。
在Collectors中,有一个groupingBy()方法,它可以根据给定的函数将流(Stream)中的元素进行分组,返回一个Map类型的结果。groupingBy()方法非常适合用于将数据按某个属性分类统计的场景。
下面,让我们通过实例来感受Java中的 Collectors groupingBy() 方法。
假设我们有一个Person类,其中包含了姓名(name)和年龄(age)两个属性。现在,我们想要按照年龄对Person对象进行分组,统计每个年龄段的Person数目。
我们先构造一些Person对象作为数据源。为了简化,我们只使用了两个年龄段。
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
List<Person> personList = new ArrayList<>();
personList.add(new Person("张三", 18));
personList.add(new Person("李四", 20));
personList.add(new Person("王五", 19));
personList.add(new Person("赵六", 20));
接下来,我们使用groupingBy()方法对Person对象进行分组,并统计每个年龄段的Person数目。
Map<Integer, Long> result = personList.stream().collect(Collectors.groupingBy(Person::getAge, Collectors.counting()));
System.out.println(result);
代码解释:
输出结果:
{18=1, 19=1, 20=2}
说明:
这样,我们就使用groupingBy()方法对Person对象进行了分组统计。
Java中的 Collectors groupingBy() 方法是一个非常有用的函数,它可以根据给定的函数将流(Stream)中的元素进行分组,返回一个Map类型的结果。groupingBy()方法非常适合用于将数据按某个属性分类统计的场景。