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,这样我就不必每次都迭代整个地图?
有任何想法吗?
您可以使用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)