我需要将一些数据组织成日期范围。我有一系列标识符,每个标识符都有一些有效的日期范围。日期范围由开始日期和结束日期组成,我将其保存在包含两个日期元素的列表中。所以最后,我有一个Map<Integer, List<List<Date>>>
,看起来有点麻烦。有没有更好的方法来保存这些信息?
问问题
161 次
4 回答
1
你可以试试番石榴MultiMap
ListMultimap<Integer, List<Date>> mm = LinkedListMultimap.create();
于 2013-06-26T10:48:50.190 回答
0
如果您对包括 guava 或 apache 不感兴趣,这里有一个解决方案。
public class DateRange {
private final Date start;
private final Date end;
public DateRange(Date start, Date end) {
this.start = start;
this.end = end;
}
public boolean contains(Date date) {
// Use whatever comparison method is best
// for your particular date objects here
return date.compareTo(start) >= 0 && date.compareTo(end) <= 0);
}
// Getters, Setters if applicable, etc.
}
现在Map<Integer, List<DateRange>>
看起来很容易阅读。为了进一步分解它,您可以创建一个 Identifier 类,如Rene Links 的回答所建议的那样,只需将 apache commons Range 替换为您DateRange
的 s 列表,如下所示:
public class Identifier {
private final int id;
private final List<DateRange> ranges;
public Identifier(in id, List<DateRange> ranges) {
this.id = id;
this.ranges = ranges;
}
public boolean isActive(Date date) {
for(DateRange dr : ranges) {
if(dr.contains(date)) {
return true;
}
}
return false;
}
于 2013-06-26T11:06:03.453 回答
0
一般来说,你可以把它分成几类:
class A {
Date from;
Date until;
}
class B {
List<A> list = ...
}
class C {
List<B> list = ...
}
当然是有意义的名字。所以你可以C
在你的地图中使用。
无论如何,您可能会在每个类级别上都有方法,因此稍后您不必担心这些方法的位置——它们也很适合这个结构。
于 2013-06-26T10:48:04.337 回答
0
我建议使用以下内容,看起来更好(主观)并且在域方面更正确:
Map<Integer, List<DateRange>>
哪里DateRange
可能只是:
public class DateRange {
Date start;
Date end;
}
(修改限定符并添加您认为合适的 getter/setter/methods)
额外提示:另外,我想指出,对于大多数现实世界的约会任务,java.util.Date
它java.util.Calendar
很难使用并且并不总是明确定义的。我建议你考虑使用Joda time。恰好有一个Interval
适合您的场景的类。
于 2013-06-26T11:34:42.460 回答