我有一个 List
的 Stat
对象和每个 Stat
有一个 Date
field 。这个列表可能非常大。我想做的是有效地将这些对象组织成日期范围(具体为几周)。因此,如果两个对象在同一周发生,它们将进入相同的 List
。 .为简单起见,“周”间隔已经定义,因此您不必担心得出范围。
这是我目前的方法。我有一个 LinkedHashMap<Date, List<Stat>>
它包含我需要的所有日期,按升序排列,每个条目都用空的 ArrayList
初始化。 .我在想每一个 Stat
,遍历 Map 的整个 entrySet,并跟踪统计数据也大于或等于的最接近日期。那么它将类似于 map.get(closestDate).add(stat)
.
似乎应该有更好的方法来做到这一点。也许创建类似 findClosestKeyGreaterThanOrEqualTo
的东西这样我就不必每次都遍历整个 map ?
有什么想法吗?
最佳答案
您可以使用 NavigableMap
(如 TreeMap
)有 very useful methods正是为了这个目的。
使用您计算的所有值和每个值的空列表初始化您的 map :
NavigableMap<Date, List<Stat>> map = new TreeMap<>();
// add all your weekly values associated with empty lists
然后对于您的每个 Stat
对象,只需通过以下方式找到正确的列表:
final Entry<Date, List<Stat>> entry = map.floorEntry(stat.getDate());
entry.getValue().add(stat);
关于java - 在 Java 中按日期范围组织对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25675832/