【发布时间】:2023-03-09 03:37:02
【问题描述】:
我有一个 TrackDay 对象列表,供跑步者在不同的日子在田径场上行走。每对开始/结束时间都标志着跑步者跑了一圈。我们保证有一个匹配的开始/结束日期(按照它们在相应列表中出现的顺序):
TrackDay() {
List<DateTime> startTimes
List<DateTime> finishTimes
}
我想找出跑步者跑得最多的前 N 天(比如说 3 天)。这意味着找到每个 TrackDay 对象的 N 最长总开始/结束时间。天真的方法是执行以下操作:
for (TrackDay td : listOftrackDays) {
// loop through each start/finish lists and find out the finish-start time for each pair.
// Add the delta times (finish-start) up for each pair of start/finish objects.
// Create a map to store the time for each TrackDay
// sort the map and get the first N entries
}
有没有更好、更干净/高效的方法来完成上述操作?
【问题讨论】:
-
将 Collection.sort() 与自定义比较器一起使用。
-
我会照 Jawad 所说的去做,并在
TrackDay类中添加一个totalTime()方法 -
@JawadLeWywadi 感谢您的建议。您能否在假设 TrackDay 的定义不能更改的情况下,稍微扩展一下这种比较器的工作原理。一个代码 sn-p 会有很大帮助
-
Collections.sort(...)的唯一问题是这将发生在适当的位置,如果他的列表排序有意义,那么排序操作后它将随后丢失。 -
@Tgsmith61591 没错,我创建了一个包含所有 totalTimes 值的临时列表,并且临时列表不是原始列表排序的。