List<User> 根据 名称性别分组,取年龄最大的
时间: 2024-03-12 12:46:11 浏览: 47
基于springboot大学生就业信息管理系统源码数据库文档.zip
可以使用 Java 8 的 Stream API 来实现这个需求。具体实现步骤如下:
1. 使用 Stream 的 `collect()` 方法将 List 转换为 Map,其中键为名称和性别组成的字符串,值为 User 对象。
2. 使用 Stream 的 `groupingBy()` 方法按照名称和性别分组。
3. 使用 Stream 的 `maxBy()` 方法获取每组中年龄最大的 User 对象。
4. 使用 Stream 的 `map()` 方法将每组中的键和最大年龄的 User 对象转换为键值对。
代码如下:
```java
List<User> list = ...; // 给定的 List
Map<String, User> map = list.stream()
.collect(Collectors.toMap(
user -> user.getName() + "," + user.getGender(), // 键为名称和性别组成的字符串
Function.identity(), // 值为 User 对象
(a, b) -> a.getAge() > b.getAge() ? a : b // 合并时取年龄最大的对象
));
Map<String, User> result = map.entrySet().stream()
.collect(Collectors.groupingBy(
entry -> entry.getKey().split(",")[0], // 按照名称分组
Collectors.maxBy(Comparator.comparing(entry -> entry.getValue().getAge())))) // 获取每组中年龄最大的 User 对象
.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey, // 键为名称
entry -> entry.getValue().get())); // 值为最大年龄的 User 对象
```
这样就可以将 List<User> 根据名称和性别分组,取年龄最大的 User 对象,转换为 <String,User> 的 Map 了。
阅读全文