【发布时间】:2018-05-03 14:21:34
【问题描述】:
我有一个包含连续时间段(没有重叠)和某个值的结构。
class Record {
private TimeWindow timeWindow;
private String value;
}
interface TimeWindow {
LocalDate getBeginDate();
LocalDate getEndDate(); //Can be null
}
我的目标是实现一个获取日期并计算出值的函数。 一个简单的实现可能是遍历所有记录,直到日期与窗口匹配。
class RecordHistory {
private List<Record> history;
public String getValueForDate(LocalDate date) {
for (Record record : history) {
if (record.dateMatchesWindow(date)){
return record.getValue();
}
}
return null; //or something similar
}
}
class Record {
private TimeWindow timeWindow;
private String value;
public boolean dateMatchesWindow(LocalDate subject) {
return !subject.isBefore(timeWindow.getBeginDate()) && (timeWindow.getEndDate() == null || !subject.isAfter(timeWindow.getEndDate()));
}
public String getValue(){
return value;
}
}
这些值的来源来自数据库查询(没有机会更改表的结构)。记录列表可能很小也可能很大,并且从历史开始到结束的日期各不相同。但是,对于相同的 RecordHistory,相同的日期不会计算两次。会有多个 RecordHistory 对象,值代表不同的属性。
有没有一种有效的方法来搜索这个结构?
【问题讨论】:
-
让数据库帮你搜索?
-
索引您的表并让数据库执行搜索
-
不幸的是,数据库更改不是一种选择
标签: java performance search