2016-09-27 92 views
2

给定一个RealmObject,它具有latitudelongitude字段,并且您有RealmList或RealmResult这样的对象。你如何根据距离来排序,比如你目前的Location?如雨后春笋般涌现在脑海如何按距离排序RealmList或RealmResult?

思路是:

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

Android上的任何人发现一个很好的解决方案?

+0

我所知道的是,[RealmGeoPoint(https://github.com/realm/realm-java/issues/1772)在路线图上,但据我所知,并不完全是一个优先事项。有一个迅速解决方案链接在那里,但我真的没有得到斯威夫特。 – EpicPandaForce

+0

@EpicPandaForce谢谢,我添加了我的投票。我真的很想在此期间找到解决方案。我查看了Swift代码,并且它使用了我认为在Java领域没有相同功能的扩展。 –

回答

1

像这样的东西确实需要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); 
    } 
}); 
+0

另请参阅https://github.com/realm/realm-java/issues/1772 – geisshirt

+0

@Christain Melchior,我也按照相同的方式对30K数据的搜索结果进行排序,但UI冻结在real.copyFromRealm(城市。您的对此的及时回应将不胜感激,谢谢 – Rajendra