你如何按距离对RealmList或RealmResult进行排序?

时间:2016-09-27 20:14:28

标签: android sorting realm

如果RealmObject包含字段latitudelongitude,则您拥有RealmList或RealmResult此类对象。您如何按距离排序,例如您当前的Location

想到的想法是:

  1. 添加字段calculatedDistance,遍历所有对象并进行设置。这种方法的问题在于,下次您致电copyToRealmOrUpdate(..)时,您将使用null覆盖此字段。
  2. 使用我自己的自定义Comparator在列表或结果上调用Collections.sort(...)但是我无法在托管RealmList或RealmResult的行为中找到它们的文档。由"外人"。
  3. 重新排序
  4. 使用groupingsbetween(..)等进行真正高级的查询 - 但我无法提出一个好主意。
  5. Android上的任何人都找到了一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

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

现在我认为最好的办法是将数据从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);
  }
});