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]
关键点说明:
日期解析:使用
DateTimeFormatter
指定日期格式 "yyyy:MM:dd"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]
关键点说明:
时间解析:使用
LocalTime.parse()
和DateTimeFormatter.ofPattern("HH:mm:ss")
区间判断:
!time.isBefore(startTime) && !time.isAfter(endTime)
- 推荐使用time.compareTo(startTime) >= 0 && time.compareTo(endTime) <= 0
- 使用compareTo方法两种方法都包含边界值
时间格式:HH表示24小时制的小时,mm表示分钟,ss表示秒
注意事项:
如果时间跨越午夜(如23:00到01:00),需要特殊处理
确保所有时间字符串都符合指定的格式
如果时间格式不一致,需要先进行标准化处理