项目中用到全国的加油站数据加载 并根据经纬度算出距离 然后根据距离从小到大排序 先来看下 未排序下的效果图 根据我们拿到的数据 然后对数据做处理 也就是计算 拿到每个Bean里的经纬度
前言
主要是数据类型是Double 这里必须对数据进行封装
实现也不难 这里讲一下自己的实现方法和实现思路效果图
仔细看上图中的距离 是没有排序的 距离都是打乱的 我们的目的是从小到大完成排序。
Double类型数据排序
Collections.sort(ag.state_list, new Comparator<State>() { public int compare(State sta1, State sta2) { //这里的数据类型如果是double 会报错 //错误提示:cannot invoke compareTo(double) on the primitive type double return sta1.score.compareTo(sta2.score); } });
double不能直接排序的解决方法
compareTo只适合实现了Comparable的对象类型 // 第一种修改方法: Collections.sort(ag.state_list, new Comparator<State>() { public int compare(State sta1, State sta2) { return new Double(sta1.score).compareTo(new Double(sta2.score)); } }); } // 第二种解决方法是: double score;//对score的定义 //修改为: Double score; //score改为double的包装类Double类型 }
排序代码实现
if (homeModelBaseBean.getCode() == SUCCESS) { //拿到数据 List<HomeModel> data = homeModelBaseBean.getData(); //非空判断 if (data != null && data.size() > 0) { for (int i = 0; i < data.size(); i++) { //排序接口 实现compare Collections.sort(data, new Comparator<HomeModel>() { @Override public int compare(HomeModel o1, HomeModel o2) { //这里拿到当前经纬度和油站经纬度通过Utils算出每个油站距离当前的距离 //再根据距离实现从近到远的排序 double dis = GetDistanceUtils.getDistance(latLng.longitude, latLng.latitude, o1.getGasAddressLongitude(), o1.getGasAddressLatitude()); double dis2 = GetDistanceUtils.getDistance(latLng.longitude, latLng.latitude, o2.getGasAddressLongitude(), o2.getGasAddressLatitude()); //打印log看下数据排序 Log.e(TAG, "算出距离为:" + dis); //这里使用第一种修改方法 new Double类型 //因为这个距离是算出来的 并不是后台返回定义的类型 return new Double(dis).compareTo(dis2); } }); } } mHomeView.showGasList(data); } else { mHomeView.showNetWorkError(); }
Log
排序实现(距离从近到远)
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算