【问题标题】:Sorting a list of location by nearest first to my location - Android按最靠近我的位置对位置列表进行排序 - Android
【发布时间】:2020-08-08 02:02:39
【问题描述】:
private List<Location> sortLocations(List<Location> locations, final Location myLocation) {

        Comparator comp = new Comparator<Location>() {
            @Override
            public int compare(Location o1, Location o2) {

                Float dist1 = o1.distanceTo(myLocation);
                Float dist2 = o2.distanceTo(myLocation);

                return dist1.compareTo(dist2);
            }
        };

        Collections.sort(locations, comp);

    return locations;
}

我想按最接近 myLocation 的顺序对位置列表进行排序。我的代码是否正确,因为问题是它没有按升序或降序排序。它只是随机的,甚至与数据库顺序不相似。但是原始位置列表和新位置列表相同..请帮助..

【问题讨论】:

  • 你能添加你的Location
  • location 是一个 android 类。这不是问题。但是,如果您先自己测试它可能会很有用。如果它被反转,只需调用 Collections.reverse 之后
  • “我认为它不起作用”的描述性不足以帮助人们理解您的问题(您甚至不确定是否有问题!)。相反,描述确切观察到的行为以及预期的行为应该是什么。包括任何示例输入、预期/实际输出和任何错误消息的确切文本,包括任何异常的完整 stack trace(如果适用)以及堆栈跟踪指向的代码行。请参阅How to AskHow to create a Minimal, Reproducible Example
  • 问题是它不是升序或降序排序。它只是随机的,甚至与数据库顺序不相似。但是原始位置列表和新位置列表相同。

标签: java android sorting location comparator


【解决方案1】:

可能会有帮助

 private List<Location> sortLocations(List<Location> locations, final Location myLocation) {
        Map<Float, Location> map = new TreeMap<>(Comparator.comparing(Float::floatValue));
        locations.forEach(location -> map.put(Math.abs(location.distanceTo(myLocation)), location));
        return new ArrayList<>(map.values());
    }

【讨论】:

    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 2010-09-13
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多