如何将list按照多个属性分组分组并按规定字段排序
时间: 2024-03-16 17:44:49 浏览: 60
如果你想按照多个属性进行分组,可以使用 `Collectors.groupingBy` 方法的重载版本,该方法接受一个 `Function` 类型的参数,该参数可以返回一个自定义的键(key)来进行分组。你可以将多个属性组合成一个键,然后按照该键进行分组。
假设你有一个 `List<User>`,其中 `User` 类有 `name`、`age` 和 `gender` 属性。你想要按照 `name` 和 `gender` 字段进行分组,并按照 `age` 字段进行排序。代码示例如下:
```java
List<User> userList = new ArrayList<>();
// 添加用户数据
Map<String, Map<String, List<User>>> groupedUsers = userList.stream()
.collect(Collectors.groupingBy(User::getName, Collectors.groupingBy(User::getGender)));
List<List<User>> sortedGroups = new ArrayList<>();
groupedUsers.values().forEach(genderMap -> {
genderMap.values().forEach(group -> {
group.sort(Comparator.comparing(User::getAge));
sortedGroups.add(group);
});
});
```
上述代码将会先按照 `name` 和 `gender` 字段分组,并将结果保存在一个嵌套的 `Map` 中。接着,我们遍历每个分组,按照 `age` 字段进行排序,并将排序后的分组添加到一个列表中。
最终,你将得到一个按照 `name` 和 `gender` 字段组合分组并按照 `age` 字段排序的结果列表。
阅读全文