List<Object> 根据 编码分组,取最大修改时间,转换为 <String,Date>
时间: 2023-11-11 07:24:49 浏览: 150
可以使用 Java 8 的 Stream API 来实现这个需求。具体实现步骤如下:
1. 使用 Stream 的 `collect()` 方法将 List 转换为 Map,其中键为编码,值为包含编码和修改时间的对象。
2. 使用 Stream 的 `map()` 方法将 Map 中的对象转换为包含编码和修改时间的字符串。
3. 使用 Stream 的 `groupingBy()` 方法将字符串按照编码分组。
4. 使用 Stream 的 `max()` 方法获取每组中修改时间最大的对象。
5. 使用 Stream 的 `map()` 方法将每组中的对象转换为包含编码和修改时间的键值对。
代码如下:
```java
List<Object> list = ...; // 给定的 List
Map<String, Object> map = list.stream()
.collect(Collectors.toMap(
obj -> ((YourObject) obj).getEncoding(), // 键为编码
obj -> obj, // 值为包含编码和修改时间的对象
(a, b) -> a.getModifiedTime() > b.getModifiedTime() ? a : b // 合并时取修改时间最大的对象
));
Map<String, Date> result = map.entrySet().stream()
.map(entry -> entry.getValue().getEncoding() + "," + entry.getValue().getModifiedTime()) // 将对象转换为字符串
.collect(Collectors.groupingBy(
str -> str.split(",")[0], // 按照编码分组
Collectors.maxBy(Comparator.comparing(str -> str.split(",")[1]))) // 获取每组中修改时间最大的字符串
.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey, // 键为编码
entry -> new Date(Long.parseLong(entry.getValue().get().split(",")[1])))); // 值为修改时间
```
这样就可以将 List<Object> 根据编码分组,取最大修改时间,转换为 <String,Date> 的 Map 了。
阅读全文