我正在根据特定的输入开始和结束时间(如Instant
)收集项目。
这些项目如下所示:
data class Item (val created: Instant, val name: String)
当我试图做的是得到所有的项目之间存在一个特定的开始和结束时间。所以作为一个例子(只是为了简单起见,假设秒在这里):
Item1 - created: 2 seconds
Item2 - created: 5 seconds
Item3 - created: 9 seconds
Item4 - created: 12 seconds
给定输入getItem(from = 3 seconds, to = 13 seconds)
,我应该得到返回的所有项,因为尽管Item1不是在3秒后创建的,但它在Item2创建之前就存在了。
或者,如果输入是getItem(from = 5 seconds, to = 9 seconds)
,我应该只得到项目2和3,因为它们是在整个范围内创建和存在的。
在Kotlin中做这件事的最好方法是什么?
获取在输入范围之间创建的项相当简单,看起来像这样(假设项已排序):
items.filter {
it.created.isAfter(start) && it.created.isBefore(end)
}
但这会遗漏输入中可能已经存在但不是在输入期间创建的项。
2条答案
按热度按时间jtw3ybtb1#
你只需要跟踪上一个值。类似这样的东西应该可以工作:
假设:
created
排序start
处的created
项,但不包含之前的任何项end
处的项目created
,但不包含之后的任何项目tkclm6bt2#
这是一个基于索引迭代的解决方案,但与@Ruckus T-Boom的答案的一般原理相同。
这并没有涵盖所有可能的边缘情况,但是很好地处理了您的示例中的情况以及其他一些情况(您可以自己检查here)