java - Java 流,等待谷歌距离矩阵返回结果
问题描述
我有一个车辆清单,我需要计算每辆车使用的总燃料。我正在使用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")
打印,其余的则没有。
解决方案
您在创建 LatLng 时有错字,您发送的是纬度而不是经度。可能是 Google 没有回复您或需要很长时间才能回复,因为无法计算出这些点之间的路线。
推荐阅读
- php - 感谢登录用户上传文件
- python - 安装 sqlite3 时 Heroku python 应用程序无法构建
- python-3.x - 我正在尝试将 python 网络应用程序部署到 Google App Engine 。它在本地工作,但我无法让它托管。在实例上出现构建错误
- metal - 旧的金属特征集表文档的可用性?
- javascript - 更准确的时间比较方法
- html - 无法在 html 文件上缩放 svg
- python - 如何在 Python 中创建有界 int?
- c++ - C++ 相当于 Python 的 scipy.sparse.rand
- xcode - Xcode 移除重复的 Pod 框架
- machine-learning - Pytorch 中 GRU 单元的隐藏和输出是否相同?