Advertisement
Guest User

SpeedCalculator

a guest
Oct 1st, 2014
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.76 KB | None | 0 0
  1. package dailyprogrammer.medium.averagespeedcameras;
  2.  
  3. import java.io.File;
  4. import java.time.Duration;
  5. import java.time.LocalTime;
  6. import java.util.ArrayList;
  7. import java.util.Collections;
  8. import java.util.List;
  9. import java.util.stream.IntStream;
  10.  
  11. public class SpeedCalculator {
  12.  
  13.     private LogParser parser;
  14.  
  15.     private List<CameraLog> cameras;
  16.  
  17.     SpeedCalculator() {
  18.         this.parser = new LogParser();
  19.     }
  20.  
  21.     public List<Pair<String, Double>> getSpeedingCars(File logFile) throws Exception {
  22.         parser.parseLog(logFile);
  23.         cameras = parser.getCameras();
  24.         List<Pair<String, Double>> ret = Collections.synchronizedList(new ArrayList<>());
  25.         parser.getCars().stream().parallel()
  26.             .forEach(car -> checkSpeed(car, parser.getDistMeasure(), ret));
  27.         return ret;
  28.     }
  29.  
  30.     private void checkSpeed(String car, LogParser.DistMeasure distMeasure, List<Pair<String, Double>> lst) {
  31.         IntStream.range(0, cameras.size() - 1).forEach(i -> {
  32.             CameraLog cam1  = cameras.get(i);
  33.             CameraLog cam2  = cameras.get(i + 1);
  34.             LocalTime time1 = cam1.getCarPassTime(car);
  35.             LocalTime time2 = cam2.getCarPassTime(car);
  36.             double div      = distMeasure == LogParser.DistMeasure.KM ? 1000.0 : 1609.0;
  37.             double camDist  = (cam2.getDist() - cam1.getDist()) / div;
  38.             double duration = Duration.between(time1, time2).toNanos() / 1e9 / 60.0 / 60.0;
  39.             double speed    = camDist / duration;
  40.             if (speed > parser.getSpeedLimit()) lst.add(new Pair<>(car, speed - parser.getSpeedLimit()));
  41.         });
  42.     }
  43.  
  44.     public String getDistString() {
  45.         return parser.getDistMeasure() == LogParser.DistMeasure.KM ? "km/h" : "mph";
  46.     }
  47.  
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement