Java8 stream 怎么分组统计
时间: 2023-06-02 12:04:31 浏览: 146
可以使用Collectors.groupingBy()方法进行分组统计。示例代码如下:
```
List<Person> people = Arrays.asList(
new Person("John", 30),
new Person("Julie", 35),
new Person("Jane", 25),
new Person("Jake", 25),
new Person("Jack", 30)
);
Map<Integer, Long> countByAge = people.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.counting()));
System.out.println(countByAge);
```
输出结果为:
```
{25=2, 30=2, 35=1}
```
其中,Person是一个自定义的类,包含name和age两个属性。使用stream进行分组统计时,先使用groupingBy方法指定分组的属性,然后使用counting方法统计数量。
相关问题
java8 stream分组统计数量
Java 8 引入了 Stream API,其中 `groupingBy` 方法常用于对数据进行分组并计算每个组的数量。这个方法通常配合 `collect` 函数一起使用。假设我们有一个 List 对象,包含一些对象,比如 User 类型,每个用户有 name 属性,我们可以这样做:
```java
List<User> users = ...; // 假设 User 类有个 getName() 方法
Map<String, Long> groupCounts = users.stream()
.collect(Collectors.groupingBy(User::getName,
Collectors.counting()));
for (Map.Entry<String, Long> entry : groupCounts.entrySet()) {
String groupName = entry.getKey();
long count = entry.getValue();
System.out.println("Name: " + groupName + ", Count: " + count);
}
```
这里,`User::getName` 是一个方法引用,表示按用户的名字进行分组,`Collectors.counting()` 表示对每个组计算数量。结果会是一个键值对的 Map,键是用户名,值是该用户名对应的用户数。
java8 stream分组统计数量取前5个
Java 8的Stream API 提供了非常方便的功能来进行数据处理,包括分组统计和排序。如果你想对一组对象按照某个属性进行分组,并统计每个组的数量,然后获取数量最多的前五个组,可以这样做:
首先,假设你有一个`Person`类,有一个`String`类型的`category`字段,你可以创建一个`Map<String, Long>`来存储类别和对应的数量:
```java
List<Person> people = ... // 你的人员列表
Map<String, Long> groupedCounts = people.stream()
.collect(Collectors.groupingBy(Person::getCategory, Collectors.counting()));
```
这行代码会将`people`列表中的每个人按`category`字段分组,然后计算每个组的大小。
接下来,如果你想要获取数量最多的前五个组:
```java
List<Map.Entry<String, Long>> topFiveEntries = groupedCounts.entrySet().stream()
.sorted(Map.Entry.<String, Long>comparingByValue().reversed())
.limit(5)
.collect(Collectors.toList());
```
这会创建一个新的列表,其中包含按值降序排列的前五个条目。
最后,你可以遍历`topFiveEntries`得到前五个分类及其对应的数量:
```java
for (Map.Entry<String, Long> entry : topFiveEntries) {
System.out.println("分类:" + entry.getKey() + ", 数量:" + entry.getValue());
}
```
阅读全文
相关推荐















