List<MaihuoRenwuVo> renwuVos 此列表中有字段Date lastChangePointTime,使用stream流筛选今天以前每隔3天的数据
时间: 2024-09-14 10:12:29 浏览: 42
List<map>多字段组合排序
5星 · 资源好评率100%
在Java中,我们可以使用Stream API来处理集合,并且结合日期相关的操作来筛选满足特定条件的数据。首先,我们需要一个基准时间点,即今天日期,然后通过流的操作来筛选出日期字段在今天之前,并且每隔3天的数据。
以下是使用Stream API来完成这个任务的大致代码示例:
```java
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
// 假设这是你的实体类
class MaihuoRenwuVo {
private Date lastChangePointTime;
// 省略其他代码...
public Date getLastChangePointTime() {
return lastChangePointTime;
}
public void setLastChangePointTime(Date lastChangePointTime) {
this.lastChangePointTime = lastChangePointTime;
}
}
public class Main {
public static void main(String[] args) {
// 假设renwuVos是已经初始化好的List<MaihuoRenwuVo>对象
List<MaihuoRenwuVo> renwuVos = new ArrayList<>();
// 添加一些数据到renwuVos中...
// 获取今天的日期作为基准
LocalDate today = LocalDate.now();
// 使用Stream流筛选数据
List<MaihuoRenwuVo> filteredVos = renwuVos.stream()
.filter(maihuoRenwuVo -> {
// 假设lastChangePointTime是LocalDate类型,如果不是需要转换
LocalDate lastChangeDate = maihuoRenwuVo.getLastChangePointTime().toInstant()
.atZone(ZoneId.systemDefault()).toLocalDate();
// 计算与今天日期的差值(天数)
long daysBetween = ChronoUnit.DAYS.between(lastChangeDate, today);
// 返回差值能被3整除的数据
return daysBetween > 0 && daysBetween % 3 == 0;
})
.collect(Collectors.toList());
// filteredVos就是筛选后每隔3天的数据列表
}
}
```
请注意,这个代码假设`lastChangePointTime`字段是可以直接转换成`LocalDate`的。如果`lastChangePointTime`是`Date`类型,需要先转换为`LocalDate`。此外,这里假设了`Date`是指Java的`java.util.Date`类型,如果实际使用的是其他类型的`Date`(如Joda-Time的`DateTime`),需要相应地调整转换代码。
阅读全文