java - 在 Java 中按日期范围组织对象

标签 java algorithm date data-structures dictionary

我有一个 ListStat对象和每个 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/

相关文章:

date - 在 hive 表中创建具有日期数据类型的列

Java:具有非透明组件的透明窗口?

java - equencer.startRecording() 没有立即开始? Java MIDI

java - 将链表拆分为 2 个包含最小和最大数字的偶数列表

c - 快速计算数组中较小/相等/较大元素的方法

Excel : Select max and min Datetime in a row

java - 2D 数组通过从 0 到数组大小的位置编号获取行和列

java - 无法找到或加载主类文件

在 2D 中拟合抽象距离的算法

java - java中的日期格式