首页 > 解决方案 > 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")打印,其余的则没有。

标签: javajava-streamgoogle-distancematrix-api

解决方案


您在创建 LatLng 时有错字,您发送的是纬度而不是经度。可能是 Google 没有回复您或需要很长时间才能回复,因为无法计算出这些点之间的路线。


推荐阅读