Kotlin如何基于创建时间筛选特定日期区间内存在的所有条目?
Kotlin 筛选指定时间区间内存在的条目
首先明确核心逻辑:由于Item创建后会持续存在(无过期时间),我们需要筛选出在[from, to]区间内任意时刻存在过的所有条目。
你当前的代码it.created.isAfter(start) && it.created.isBefore(end)仅能筛选出创建时间严格落在区间内的条目,会漏掉那些在区间开始前就已创建、但在区间内持续存在的条目(比如例子1中的Item1)。
正确的筛选实现
因为条目一旦创建就不会消失,所以只要条目的创建时间不晚于区间结束时间to,它就一定在[from, to]区间内存在过(要么在区间开始前已存在,要么在区间内创建)。唯一需要排除的是创建时间晚于to的条目——这些条目在区间结束后才创建,不会在区间内存在。
对应的Kotlin代码如下:
items.filter { it.created <= end }
针对你的例子验证
- 调用
getItem(from = 3秒, to = 13秒):所有条目的created都≤13秒,因此返回全部4个条目,符合预期。 - 调用
getItem(from = 5秒, to = 9秒):Item1的created=2秒≤9秒,Item2=5秒≤9秒,Item3=9秒≤9秒,Item4=12秒>9秒,因此应返回Item1、Item2、Item3。这里你的例子描述可能存在误差,Item1在5-9秒区间内是存在的,应该被包含。
补充:如果需求是“条目在整个区间内持续存在”
如果你的真实需求是筛选在[from, to]整个区间内都存在的条目(即条目在区间开始前就已创建),那么条件应为条目创建时间不晚于区间开始时间from:
items.filter { it.created <= from }
但这个逻辑下,例子2中的Item3创建时间=9秒>5秒,会被排除,和你给出的例子结果不符,因此这个逻辑应该不是你需要的。
内容的提问来源于stack exchange,提问作者Citut
相关产品推荐
相关产品推荐

