java使用stream流list转map统计有相同属性的对象例子
时间: 2023-03-19 16:21:59 浏览: 165
下面是一个Java使用Stream流将List转换为Map并统计具有相同属性的对象的示例:
假设有一个Person类,它有两个属性,一个是名字(name),一个是年龄(age)。
首先,创建一个包含Person对象的List:
```java
List<Person> personList = new ArrayList<>();
personList.add(new Person("Alice", 20));
personList.add(new Person("Bob", 25));
personList.add(new Person("Charlie", 30));
personList.add(new Person("David", 30));
```
现在,我们要统计具有相同年龄的人数。我们可以使用Java 8的Stream API来做到这一点。以下是示例代码:
```java
Map<Integer, Long> ageCountMap = personList.stream()
.collect(Collectors.groupingBy(Person::getAge, Collectors.counting()));
```
这里,我们使用了`Collectors.groupingBy`方法,该方法接受一个分类函数(这里是Person::getAge),将具有相同键的元素分组到Map的值列表中,并将结果放入Map中。使用`Collectors.counting()`,我们将值列表中的元素计数,并将其作为值放入Map中。
现在,我们可以使用ageCountMap来获取每个年龄的人数:
```java
System.out.println(ageCountMap);
```
输出:
```
{20=1, 25=1, 30=2}
```
这表示20岁有1个人,25岁有1个人,30岁有2个人。
阅读全文