我需要将一些数据组织到日期范围内。我有一系列标识符,每个标识符都有一些活动日期范围。日期范围包括开始日期和结束日期,我将保存在两个日期元素的列表中。
所以最后,我有一个Map<Integer, List<List<Date>>>
,看起来有点麻烦。有没有更好的方法来保存这些信息?
答案 0 :(得分:1)
您可以尝试番石榴MultiMap
ListMultimap<Integer, List<Date>> mm = LinkedListMultimap.create();
答案 1 :(得分:0)
一般来说,你可以把它分成几类:
class A {
Date from;
Date until;
}
class B {
List<A> list = ...
}
class C {
List<B> list = ...
}
当然有了有意义的名字。因此,您可以在地图中使用C
。
你可能会在每个类级别都有方法,所以稍后你不必担心这些方法的位置 - 它们也很适合这个结构。
答案 2 :(得分:0)
如果您对包含番石榴或阿帕奇不感兴趣,可以使用以下解决方案。
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>>
似乎很容易阅读。要进一步分解,你可以创建一个像Rene Links's answer建议的标识符类,只需将apache commons Range替换为DateRange
的列表,如下所示:
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;
}
答案 3 :(得分:0)