java stream 相同类别下 2级 分组 示例
时间: 2023-11-02 12:10:23 浏览: 86
假设我们有一个 `Person` 类,其中包含 `name`、`age` 和 `gender` 三个属性,我们希望根据 `gender` 分组,然后在每个分组中再根据 `age` 分组。可以使用 Java 8 中的 Stream API 来实现:
```java
List<Person> persons = Arrays.asList(
new Person("Alice", 20, "F"),
new Person("Bob", 25, "M"),
new Person("Charlie", 30, "M"),
new Person("David", 35, "F"),
new Person("Emily", 40, "F")
);
Map<String, Map<Integer, List<Person>>> result = persons.stream()
.collect(Collectors.groupingBy(Person::getGender,
Collectors.groupingBy(Person::getAge)));
System.out.println(result);
```
输出结果如下:
```
{F={20=[Person{name='Alice', age=20, gender='F'}], 35=[Person{name='David', age=35, gender='F'}], 40=[Person{name='Emily', age=40, gender='F'}]}, M={25=[Person{name='Bob', age=25, gender='M'}], 30=[Person{name='Charlie', age=30, gender='M'}]}}
```
可以看到,`result` 是一个嵌套的 `Map`,其中外层的键是 `gender`,内层的键是 `age`,值是对应的 `Person` 对象列表。
阅读全文