java8判断年月日相等则取最新时间数据
时间: 2023-12-08 14:03:37 浏览: 69
假设你有一个包含多个时间数据的列表,每个时间数据都有一个 `LocalDate` 类型的日期属性,你可以按照以下步骤来实现:
1. 定义一个 `Comparator` 来比较两个时间数据的日期属性,该比较器按照日期降序排列,即新的日期排在前面:
```java
Comparator<TimeData> comparator = Comparator.comparing(TimeData::getDate).reversed();
```
2. 使用 Java 8 的 `Stream` API,对列表进行分组,分组依据是时间数据的日期属性,即将日期相同的时间数据放在同一个组中:
```java
Map<LocalDate, List<TimeData>> groups = timeDataList.stream().collect(Collectors.groupingBy(TimeData::getDate));
```
3. 对每个组进行处理,如果组中有多个时间数据,则取日期最新的那个时间数据,即第一个时间数据,因为我们已经按照日期降序排列了:
```java
List<TimeData> latestTimeDataList = groups.values().stream().map(group -> group.stream().max(comparator).orElse(null)).collect(Collectors.toList());
```
完整的代码如下所示:
```java
Comparator<TimeData> comparator = Comparator.comparing(TimeData::getDate).reversed();
Map<LocalDate, List<TimeData>> groups = timeDataList.stream().collect(Collectors.groupingBy(TimeData::getDate));
List<TimeData> latestTimeDataList = groups.values().stream().map(group -> group.stream().max(comparator).orElse(null)).collect(Collectors.toList());
```
其中,`TimeData` 是你自己定义的时间数据类型,包含日期属性和其他属性。
阅读全文