Java 8中的Stream API:如何使用Collectors类进行集合的分组和统计
引言:在Java 8中,引入了Stream API,这是一种函数式编程的概念,可以让我们以一种更简洁和优雅的方式处理集合数据。Stream API提供了丰富的功能,其中之一就是对集合进行分组和统计。本文将介绍如何使用Collectors类来实现这一功能。
示例代码如下:
class Person {
private String name;
private String gender;
private int age;
public Person(String name, String gender, int age) {
this.name = name;
this.gender = gender;
this.age = age;
}
public String getName() {
return name;
}
public String getGender() {
return gender;
}
public int getAge() {
return age;
}
}
List persons = Arrays.asList(
new Person("John", "male", 20),
new Person("Jane", "female", 25),
new Person("Tom", "male", 30),
new Person("Emily", "female", 35)
);
Map groupedByGender = persons.stream()
.collect(Collectors.groupingBy(Person::getGender));
System.out.println(groupedByGender);
登录后复制
输出结果为:
{female=[Person{name='Jane', gender='female', age=25}, Person{name='Emily', gender='female', age=35}], male=[Person{name='John', gender='male', age=20}, Person{name='Tom', gender='male', age=30}]}
登录后复制
上述代码中,我们首先创建了一个Person类作为示例,其中包含name、gender和age属性。然后创建了一个Person对象的List集合。接下来,通过stream()方法将该集合转换为流。最后,使用Collectors类的groupBy()方法,根据Person对象的gender属性进行分组,结果保存在一个Map集合中。
示例代码如下:
List numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().collect(Collectors.summingInt(Integer::intValue));
double average = numbers.stream().collect(Collectors.averagingInt(Integer::intValue));
long count = numbers.stream().collect(Collectors.counting());
System.out.println("Sum: " + sum);
System.out.println("Average: " + average);
System.out.println("Count: " + count);
登录后复制
输出结果为:
Sum: 15
Average: 3.0
Count: 5
登录后复制
上述代码中,我们首先创建了一个Integer类型的List,其中包含了一系列的数字。接下来,通过summingInt()方法求和,averagingInt()方法求平均值,counting()方法计算个数。最后,通过Collectors类的collect()方法获取结果。
总结:通过Java 8中的Stream API和Collectors类,我们可以以更简洁和优雅的方式对集合进行分组和统计操作。这一特性不仅提高了代码的可读性,还极大地增强了程序的灵活性。
以上就是本文对Java 8中的Stream API和Collectors类进行集合分组和统计的介绍,希望对您有所帮助。谢谢!
以上就是Java 8中的Stream API:如何使用Collectors类进行集合的分组和统计的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!