【问题标题】:How do you sort a RealmList or RealmResult by distance?如何按距离对 RealmList 或 RealmResult 进行排序?
【发布时间】:2016-09-27 20:14:27
【问题描述】:

给定一个具有latitudelongitude 字段的RealmObject,并且您拥有此类对象的RealmList 或RealmResult。您如何按距离排序,例如您当前的Location?。

脑海中浮现的想法是:

  1. 添加一个字段calculatedDistance,遍历所有对象并设置它。这种方法的问题在于,下次您调用 copyToRealmOrUpdate(..) 时,您将用 null 覆盖此字段。
  2. 在列表上调用 Collections.sort(...) 或使用我自己的自定义 Comparator 生成结果,但我无法在任何地方找到它记录托管 RealmList 或 RealmResult 在它们按“外人”排序时的行为.
  3. 使用 groupingsbetween(..) 等进行非常高级的查询 - 但我想不出一个好主意。

有人在 Android 上找到了好的解决方案吗?

【问题讨论】:

  • 我只知道RealmGeoPoint 在路线图上,但据我所知,这并不是一个优先事项。那里链接了一个快速的解决方案,但我真的不明白 Swift。
  • @EpicPandaForce 谢谢,我添加了我的投票。我真的很想同时找到一个解决方案。我查看了 Swift 代码,我相信它使用了我们在 Java 领域没有等效的扩展。

标签: android sorting realm


【解决方案1】:

这样的事情确实需要地理空间支持才能以任何有效的方式工作。

现在我认为你最好的选择是从 Realm 中复制数据并在工作线程中进行手动处理。

如果你在 HandlerThread 中实现它,你可以这样做

RealmResults<City> results = realm.where(City.class).findAllAsync();
results.addChangeListener(new RealmChangeListener<Results<City>>() {
  @Override
  public void onChange(RealmResults<City> cities) {
    List<City> standaloneCities = realm.copyFromRealm(cities);
    doManualSorting(standaloneCities);
    sendToUiThread(standaloneCities);
  }
});

【讨论】:

  • @Christain Melchior ,我按照同样的方法对 30K 数据的搜索结果进行排序,但 UI 冻结在 real.copyFromRealm(cities。非常感谢您对此的及时回复,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多