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

Java Lambda 处理日期时间 根据区间找出区间内集合

使用Lambda表达式和Stream API来处理日期列表,并找出指定区间内的日期(包含边界)


import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class DateRangeFilterSimple {public static void main(String[] args) {List<String> dateStrings = Arrays.asList("2025:01:01", "2025:01:02", "2025:01:03");DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy:MM:dd");LocalDate start = LocalDate.parse("2025:01:01", formatter);LocalDate end = LocalDate.parse("2025:01:03", formatter);List<String> result = dateStrings.stream().filter(dateStr -> {LocalDate date = LocalDate.parse(dateStr, formatter);return (date.isEqual(start) || date.isAfter(start)) && (date.isEqual(end) || date.isBefore(end));}).collect(Collectors.toList());System.out.println("结果: " + result);}
}

原始日期: [2025:01:01, 2025:01:02, 2025:01:03]
过滤后的日期: [2025:01:01, 2025:01:02, 2025:01:03]
直接过滤的字符串结果: [2025:01:01, 2025:01:02, 2025:01:03]

关键点说明:

  1. 日期解析:使用 DateTimeFormatter 指定日期格式 "yyyy:MM:dd"

  2. Lambda过滤:使用 filter() 方法结合条件 !date.isBefore(startDate) && !date.isAfter(endDate)

    • !date.isBefore(startDate) 确保日期不早于开始日期(包含开始日期)

    • !date.isAfter(endDate) 确保日期不晚于结束日期(包含结束日期)


使用Lambda表达式和Stream API来处理时间列表,并找出指定区间内的时间(包含边界)


import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class TimeRangeFilterSimple {public static void main(String[] args) {List<String> timeList = Arrays.asList("08:01:01", "08:11:02", "08:33:03", "07:59:59", "08:34:00");DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");LocalTime start = LocalTime.parse("08:01:01", formatter);LocalTime end = LocalTime.parse("08:33:03", formatter);List<String> result = timeList.stream().filter(timeStr -> {LocalTime time = LocalTime.parse(timeStr, formatter);return time.compareTo(start) >= 0 && time.compareTo(end) <= 0;}).collect(Collectors.toList());System.out.println("所有时间: " + timeList);System.out.println(start + " 到 " + end + " 区间内的时间: " + result);}
}

原始时间: [08:01:01, 08:11:02, 08:33:03]
过滤后的时间: [08:01:01, 08:11:02, 08:33:03]
方法2结果: [08:01:01, 08:11:02, 08:33:03]
方法3结果: [08:01:01, 08:11:02, 08:33:03]

关键点说明:

  1. 时间解析:使用 LocalTime.parse() 和 DateTimeFormatter.ofPattern("HH:mm:ss")

  2. 区间判断:

    • !time.isBefore(startTime) && !time.isAfter(endTime) - 推荐使用

    • time.compareTo(startTime) >= 0 && time.compareTo(endTime) <= 0 - 使用compareTo方法

    • 两种方法都包含边界值

  3. 时间格式:HH表示24小时制的小时,mm表示分钟,ss表示秒

注意事项:

  • 如果时间跨越午夜(如23:00到01:00),需要特殊处理

  • 确保所有时间字符串都符合指定的格式

  • 如果时间格式不一致,需要先进行标准化处理

http://www.dtcms.com/a/354082.html

相关文章:

  • Linux程序与进程:核心概念与管理全解析
  • Class45循环神经网络RNN
  • “互联网 +”时代下开源 AI 大模型 AI 智能名片 S2B2C 商城小程序:行业变革与未来展望
  • 基于 Ultralytics YOLO11与 TrackZone 的驱动的高效区域目标跟踪方案实践
  • Python Imaging Library (PIL) 全面指南:PIL基础入门-Python图像处理实战
  • 多版本兼容的golang客服系统
  • 稀土:从“稀有”到“命脉”的科技核心
  • 通过概率正 - 未标记网络从医学图像的特定感兴趣区域中学习|文献速递-深度学习人工智能医疗图像
  • 【底层机制】thread_local 变量的初始化时机和生命周期
  • Spring Retry Spring 生态系统优雅的重试组件
  • 浏览器网页路径扫描器(脚本)
  • SQL优化:SQL模拟Split二维数组
  • Linux 基础开发工具
  • django-redis 使用类实现和使用
  • React(面试)
  • JUC之异步编程理论总结
  • 实现基于数据库 flag 状态的消息消费控制
  • 【docker】P1 虚拟化与容器化
  • 全球协作无障碍:cpolar+Nextcloud实现跨国文件共享
  • 通过远程桌面横向移动(破解凭证)
  • 【51单片机】【protues仿真】 基于51单片机出租车计价器系统
  • 三轴云台之动态性能篇
  • 数字化时代催生变革,楼宇自控系统成为建筑管理新潮流的引领者
  • ESP32S3:开发环境搭建、VSCODE 单步调试、Systemview 分析任务运行情况
  • 北斗导航|接收机自主完好性监测算法综述
  • 【C++】类和对象 --- 类中的6个默认成员函数
  • CAS 浅析
  • 视觉语言模型应用开发——Qwen 2.5 视觉语言模型的零样本学习能力在多模态内容审核中的实践研究
  • 把CentOS 7默认yum源改成腾讯云镜像
  • 阿里云——云存储与数据库服务