У меня есть список транспортных средств, которые мне нужны для расчета общего расхода топлива на транспортное средство.Я использую Java streams
, чтобы пройтись по списку, получить транспортное средство, рассчитать его расстояние, используя Google distance matrix api
, использовать расстояние для расчета расхода топлива и вернуть ответ.Я заметил, что программа просто зависает, скорее всего, это может быть связано с тем, что stream
не ждет, пока Matrix api
вернет ответ, прежде чем он перейдет к следующему элементу, я говорю это, потому что я поместил вызовы system.out.println
Matrix method
и некоторые сообщения не печатаются.
Код, который предполагается для расчета общего расхода топлива
vehicles.stream().map(vehicles ->
calculateTotalFuelBeingUsedByAllVehicles(vehicle, getDistanceBetweenOriginsAndDestination(
new LatLng(vehicle.getOrigin().getLatitude(), vehicle.getOrigin().getLatitude()), new LatLng(vehicle.getDestination().getLatitude(), vehicles.getDestination().getLatitude()))))
.collect(Collectors.toList());
public static double getDistanceBetweenOriginsAndDestination(LatLng origin, LatLng destination){
//Gets printed
System.out.println("Calculating distance");
GeoApiContext context = new GeoApiContext.Builder()
.apiKey(GOOGLE_MAPS_API_KEY)
.build();
DistanceMatrixApiRequest distanceMatrixApiRequest = DistanceMatrixApi.newRequest(context)
.mode(TravelMode.DRIVING)
.trafficModel(TrafficModel.BEST_GUESS)
.departureTime(Instant.now().atZone(ZoneOffset.UTC).toInstant())
.destinations(destination)
.origins(origin);
try {
long distance = Arrays.stream(distanceMatrixApiRequest.await().rows)
.flatMap(distanceMatrixRow -> Arrays.stream(distanceMatrixRow.elements))
.mapToLong(distanceMatrixElement -> distanceMatrixElement.distance.inMeters)
.sum();
//Never gets printed
System.out.println("Calculated distance: "+distance);
return distance;
} catch (ApiException | InterruptedException | IOException e) {
//Never gets printed
System.out.println("Error encountered when calculating distance");
e.printStackTrace();
}
return 0;
}
В getDistanceBetweenOriginsAndDestination
System.out.println("Calculating distance")
получаетнапечатано, а остальные нет.