Java 流,等待 Google 到 return 结果的距离矩阵

Java streams, wait for Google distance matrix to return result

我有一份车辆清单,我需要计算每辆车使用的总燃料。我正在使用 Java streams 循环列表,获取车辆,使用 Google distance matrix api 计算其距离,使用距离计算燃料使用量和 return 响应。我注意到程序挂起很可能是 stream 在移动到下一个项目之前没有等待 Matrix api 到 return 的响应,我这样说是因为我在 Matrix method 中放置了 system.out.println 个调用,但一些消息没有打印出来。

用于计算总燃料使用量的代码

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没有回复你或者回复的时间很长,因为无法计算出这些点之间的路线。