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;


        } 


红糖糍粑
浏览 150回答 1
1回答

临摹微笑

您在创建 LatLng 时输入错误,您发送的是纬度而不是经度。可能是谷歌没有回复您或需要很长时间才能回复,因为无法计算出这些点之间的路线。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java