List<StopTime> stopTimes, double[] distances,
SortedMap<Double, Integer> scheduleTimesByDistanceTraveled) {
for (int i = 0; i < stopTimes.size(); i++) {
StopTime stopTime = stopTimes.get(i);
double d = distances[i];
// We introduce distinct arrival and departure distances so that our
// scheduleTimes map might have entries for arrival and departure times
// that are not the same at a given stop
double arrivalDistance = d;
double departureDistance = d + 1e-6;
/**
* For StopTime's that have the same distance travelled, we keep the min
* arrival time and max departure time
*/
if (stopTime.getArrivalTime() >= 0) {
if (!scheduleTimesByDistanceTraveled.containsKey(arrivalDistance)
|| scheduleTimesByDistanceTraveled.get(arrivalDistance) > stopTime.getArrivalTime())
scheduleTimesByDistanceTraveled.put(arrivalDistance,
stopTime.getArrivalTime());
}
if (stopTime.getDepartureTime() >= 0)
if (!scheduleTimesByDistanceTraveled.containsKey(departureDistance)
|| scheduleTimesByDistanceTraveled.get(departureDistance) < stopTime.getDepartureTime())
scheduleTimesByDistanceTraveled.put(departureDistance,
stopTime.getDepartureTime());
}
}