java8写一段 多个key相同时只保留最新一条数据的共通方法
时间: 2024-05-03 17:21:27 浏览: 91
可以使用Java 8的Stream API和Collectors.groupingBy()方法来实现多个key相同时只保留最新一条数据的共通方法。具体实现如下:
1. 定义一个类来表示数据:
```
public class Data {
private String key1;
private String key2;
private String value;
private LocalDateTime timestamp;
public Data(String key1, String key2, String value, LocalDateTime timestamp) {
this.key1 = key1;
this.key2 = key2;
this.value = value;
this.timestamp = timestamp;
}
// getters and setters
}
```
2. 假设有一个List<Data> dataList,它包含多个Data对象,现在要按照key1和key2进行分组,并且只保留每组中的最新一条数据。
```
List<Data> newDataList = dataList.stream()
.collect(Collectors.groupingBy(data -> Arrays.asList(data.getKey1(), data.getKey2())))
.values()
.stream()
.map(group -> group.stream().max(Comparator.comparing(Data::getTimestamp)).get())
.collect(Collectors.toList());
```
第一步使用Collectors.groupingBy()方法按照key1和key2进行分组,得到一个Map<List<String>, List<Data>>对象,其中键是由key1和key2组成的列表,值是相应的Data对象列表。
第二步使用Map.values()方法得到所有分组后的Data对象列表,然后使用Stream API的map()方法和max()方法找到每组中的最新一条数据,最后使用Collectors.toList()方法将所有最新的数据收集到一个List<Data>对象中。
这样就实现了多个key相同时只保留最新一条数据的共通方法。
阅读全文