我有一份车辆清单,我需要用它来计算每辆车使用的总燃料。我正在使用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;
}
红糖糍粑
临摹微笑
随时随地看视频慕课网APP
相关分类