Java中按日期范围组织对象

jla*_*s62 2 java algorithm dictionary date data-structures

我有一个List对象Stat,每个对象Stat都有一个Date字段。这个列表可能非常大。我想做的是将这些对象有效地组织到日期范围(具体是几周)中。因此,如果两个对象在同一周出现,它们就会进入同一个List. 为简单起见,“周”间隔已经定义,因此您不必担心确定范围。

这是我目前的方法。我有一个LinkedHashMap<Date, List<Stat>>包含按升序排列的所有我需要的日期,并且每个条目都用空的ArrayList. 我正在考虑每个Stat,迭代映射的整个条目集,并跟踪统计数据也大于或等于的最接近的日期。那么就会是这样的map.get(closestDate).add(stat)

似乎应该有更好的方法来做到这一点。也许创建类似 a 的东西findClosestKeyGreaterThanOrEqualTo,这样我就不必每次都迭代整个地图?

有任何想法吗?

Cos*_*atu 5

您可以使用NavigableMap(如TreeMap),它具有非常有用的方法来实现此目的。

使用您计算的所有值和每个值的空列表初始化您的地图:

NavigableMap<Date, List<Stat>> map = new TreeMap<>();
// add all your weekly values associated with empty lists
Run Code Online (Sandbox Code Playgroud)

然后,对于每个Stat对象,只需通过以下方式找到正确的列表:

final Entry<Date, List<Stat>> entry = map.floorEntry(stat.getDate());
entry.getValue().add(stat);
Run Code Online (Sandbox Code Playgroud)