android double值排序,android根据Double类型数据经纬度算出距离再根据距离实现排序功能...

前言

项目中用到全国的加油站数据加载 并根据经纬度算出距离 然后根据距离从小到大排序

主要是数据类型是Double 这里必须对数据进行封装

实现也不难 这里讲一下自己的实现方法和实现思路

效果图

先来看下 未排序下的效果图

5389483e98ec0f659db57e46a7469e5a.gif

仔细看上图中的距离 是没有排序的 距离都是打乱的 我们的目的是从小到大完成排序。

Double类型数据排序

Collections.sort(mList, new Comparator() {

public int compare(State o1, State o2) {

//这里的数据类型如果是double 会报错

//错误提示:cannot invoke compareTo(double) on the primitive type double

return o1.compareTo(o2);

}

});

double不能直接排序的解决方法

compareTo只适合实现了Comparable的对象类型

// 第一种修改方法:

Collections.sort(mList, new Comparator() {

public int compare(State o1, State o2) {

return new Double(o1).compareTo(new Double(o2));

}

});

}

// 第二种解决方法是:

double distance;//对distance的定义

//修改为:

Double distance;

//distance改为double的包装类Double类型

}

排序代码实现

根据我们拿到的数据 然后对数据做处理 也就是计算 拿到每个Bean里的经纬度

if (homeModelBaseBean.getCode() == SUCCESS) {

//拿到数据

List data = homeModelBaseBean.getData();

//非空判断

if (data != null && data.size() > 0) {

for (int i = 0; i < data.size(); i++) {

//排序接口 实现compare

Collections.sort(data, new Comparator() {

@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

03ea32aa841ad1f533615290d2f5b53e.png

排序实现(距离从近到远)

163d3c24fb395af1f6eedda72fbba1ec.gif

来源:oschina

链接:https://my.oschina.net/u/4274724/blog/4299787

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值