2016-09-27 80 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