我有一份车辆清单,我需要用它来计算每辆车使用的总燃料。我正在使用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; }
添加回答
举报
0/150
提交
取消