gpt4 book ai didi

java - 如何比较与当前位置的距离对 ArrayList 进行排序?

转载 作者:行者123 更新时间:2023-11-29 07:50:11 24 4
gpt4 key购买 nike

我有一些包含这些值的对象的 ArrayList

String name
String latitude
String longitude

我可以检索我当前的位置、纬度、经度。现在我的问题是如何根据当前位置与该 arrayList 的对象位置之间的距离对这个 arraylist 进行排序?我可以使用 Comparator 按字母顺序对 arrayList 进行排序,但如何进行这种排序?

最佳答案

假设您有一个名为 Point 的类,如下所示:

class Point {
double latitude;
double longitude;
}

比较器可以实现如下:

class DistanceFromMeComparator implements Comparator<Point> {
Point me;

public DistanceFromMeComparator(Point me) {
this.me = me;
}

private Double distanceFromMe(Point p) {
double theta = p.longitude - me.longitude;
double dist = Math.sin(deg2rad(p.latitude)) * Math.sin(deg2rad(me.latitude))
+ Math.cos(deg2rad(p.latitude)) * Math.cos(deg2rad(me.latitude))
* Math.cos(deg2rad(theta));
dist = Math.acos(dist);
dist = rad2deg(dist);
return dist;
}

private double deg2rad(double deg) { return (deg * Math.PI / 180.0); }
private double rad2deg(double rad) { return (rad * 180.0 / Math.PI); }

@Override
public int compare(Point p1, Point p2) {
return distanceFromMe(p1).compareTo(distanceFromMe(p2));
}
}

关于java - 如何比较与当前位置的距离对 ArrayList 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21790006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com