当前位置: 首页 > news >正文

从包含时间属性的对象列表中,筛选出时间≤指定时间参数且最接近该时间参数的那个对象

1. 第一步:定义包含 Date 时间属性的实体类

 
 
import java.util.Date;/*** 包含Date类型时间属性的业务对象*/
public class TimeObject {// 自定义业务字段(示例)private Long id;private String name;// 核心时间属性(Date类型)private Date time;// 构造方法public TimeObject(Long id, String name, Date time) {this.id = id;this.name = name;this.time = time;}// Getter/Setter(必须,用于获取/设置时间属性)public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getTime() {return time;}public void setTime(Date time) {this.time = time;}// 重写toString,方便测试输出
    @Overridepublic String toString() {return "TimeObject{" +"id=" + id +", name='" + name + '\'' +", time=" + time +'}';}
}

2. 第二步:核心工具方法(非 Stream 实现)

 
核心逻辑通过基础 for 循环+手动比较时间差实现,步骤:
 
  1. 空值校验(避免空指针);
  2. 遍历列表,筛选出「时间≤指定时间」的对象;
  3. 在符合条件的对象中,找到与指定时间时间差最小的那个(即最接近)。
import java.util.Date;
import java.util.List;/*** 时间匹配工具类(非Stream实现,兼容所有Java版本)*/
public class TimeMatchUtil {/*** 从List<TimeObject>中筛选:时间≤指定时间,且最接近该时间的对象* @param objectList 待筛选的对象列表* @param targetTime 指定的时间参数(Date类型)* @return 符合条件的对象(无则返回null)*/public static TimeObject findClosestNotExceedTime(List<TimeObject> objectList, Date targetTime) {// 1. 空值校验(工业级代码必备)if (objectList == null || objectList.isEmpty() || targetTime == null) {return null;}// 定义变量:存储最终匹配的对象、最小时间差(毫秒数)TimeObject closestObj = null;long minTimeDiff = Long.MAX_VALUE; // 初始化为最大长整型,确保第一次比较会替换// 2. 遍历列表,逐个比较for (TimeObject obj : objectList) {// 跳过对象时间为null的情况if (obj.getTime() == null) {continue;}Date objTime = obj.getTime();// 3. 过滤条件:对象时间 ≤ 指定时间(Date的compareTo方法:返回值≤0 表示≤)if (objTime.compareTo(targetTime) > 0) {continue; // 时间超过目标值,直接跳过
            }// 4. 计算当前对象与目标时间的时间差(毫秒数,目标时间 - 对象时间)long timeDiff = targetTime.getTime() - objTime.getTime();// 确保时间差为非负数(理论上不会出现,因已过滤≤的情况)timeDiff = Math.abs(timeDiff);// 5. 找到时间差更小的对象,更新结果if (timeDiff < minTimeDiff) {minTimeDiff = timeDiff;closestObj = obj;}}// 6. 返回最终匹配的对象(无符合条件则为null)return closestObj;}
}

 

http://www.jsqmd.com/news/322537/

相关文章:

  • 【2026最新】wlanapi.dll丢失/损坏怎么修?这5款修复工具实测,AI修复更省心!
  • 在 Windows中,WSL与Docker的关系
  • RAG效果好不好,全看这一步做没做对
  • 2026益生菌卫生巾测评:3家主流品牌PK,云小棉凭何成性价比之王?
  • JON MAVIN 久匠:10年品牌保障,42城89+直营门店的首选纹眉品牌
  • 2026 深圳公交广告服务商甄选 五大优质品牌助力品牌户外传播
  • 安装nginx和OpenSSL
  • 揭秘专业级公众号排版工具:3款顶级微信编辑器深度测评
  • ARP协议以及ARP欺骗攻击的原理
  • 手残党福音!我终于也有对称的野生眉了!记录久匠纹眉体验全攻略
  • 北京纹眉机构推荐?北京纹眉哪家好最专业?小白纹眉体验全记录
  • COMSOL案例解析:水平井应力场耦合机制与模拟研究
  • CRM系统如何管理客户?
  • 小巧好用,公司或者家用打印机自动安装驱动工具
  • 轻松搞定trader-x合约量化策略的实现与优化
  • colcon build 与 colcon build --symlink-install
  • 2026年贵阳养老院与养老康复中心五大优选:专业照护,安心颐养
  • 三分钟快速了解Docker
  • Kubernetes 数据迁移实战:使用 pv-migrate 工具高效迁移 PVC 数据
  • 仙人动漫-长期专注、极致打磨某一技艺,达到“人技合一”甚至“道”的境界
  • 实用指南:智慧引擎,零碳未来:安科瑞EMS3.0赋能省园区高效低碳转型
  • 【2026官方最新】贵州工商职业学院专业设置一览表(含39个专业方向)
  • 1.30 请求数据格式 相应数据格式
  • 如何打印Android手机联系人?
  • 制造国企劳动力管理如何突破合规管理困境?
  • 2026年1月30日
  • 如何用 5 种有效方法在Android手机中添加联系人
  • js打开新页签
  • ShardingSphere 分库分表技术详解与 Spring Boot 实践
  • 非线性参数的精英学习灰狼优化算法(Matlab)