为了账号安全,请及时绑定邮箱和手机立即绑定

Java流,等待谷歌距离矩阵返回结果

Java流,等待谷歌距离矩阵返回结果

红糖糍粑 2022-12-21 13:03:17
我有一份车辆清单,我需要用它来计算每辆车使用的总燃料。我正在使用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;        } 
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

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



查看完整回答
反对 回复 2022-12-21
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号