给定具有经度和纬度的Location对象集合,如何根据每个Locations与当前Location对象的距离对此列表进行排序?
我有一个方法可以计算两个位置对象之间的距离(米)。
此处Collections.Sort()
是否合适?
答案 0 :(得分:2)
是的,你可以写一个比较器:
static final Location origin;
public class LocationComparator implements Comparator {
@Override
public int compare(Location o1, Location o2) {
return Doubles.compare(distance(o1.lat, origin.lat, o1.lon, origin.lon, 0, 0),
distance(o2.lat, origin.lat, o2.lon, origin.lon, 0, 0));
}
}
距离如this answer中所定义。这比较两个点基于它们与原点的距离。
然后你可以通过调用来排序:
Collections.sort(latLonCollection, new LocationComparator());
答案 1 :(得分:1)
这是对Benjy答案的更新,除了使用Location
类的内置函数。它被隔离,包括原点作为构造函数的一部分。
public class LocationComparator implements Comparator<Location>
{
Location origin;
LocationComparator(Location origin){
this.origin= origin;
}
public int compare(Location left, Location right) {
return Float.compare(origin.distanceTo(left), origin.distanceTo(right));
}
}
使用如下
Collections.sort(latLonCollection, new LocationComparator(originLocation));