Android 使用 Collections.sort 去比對距離遠近的問題
目前是已經計算出使用者的定位到每一個點的距離
但是要如何才可以用 Collections.sort 去比對
然後 Recyclerview 從近到遠顯示呢??
DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Campsite");
Query query = reference.orderByChild("country").equalTo(country);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
progressDialog.dismiss();
if(seatch_bar.getText().toString().equals("")){
camperSiteModel.clear();
for(DataSnapshot snapshot : dataSnapshot.getChildren()){
CamperSiteModel camperSiteModel1 = snapshot.getValue(CamperSiteModel.class);
double radLat1 = rad(camperSiteModel1.getCamperSiteLatitude());
double radLat2 = rad(latitude);
double a = radLat1 - radLat2;
double b = rad(camperSiteModel1.getCamperSiteLongitude()) - rad(longitude);
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
+ Math.cos(radLat1) * Math.cos(radLat2)
* Math.pow(Math.sin(b / 2), 2)));
s = s * EARTH_RADIUS;
s = Math.round(s * 10000) / 10000;
//Log.i("到每一點的距離",Math.ceil(s)+"");
camperSiteModel1.setDistance(Math.ceil(s));
camperSiteModel.add(camperSiteModel1);
}
camperSiteAdapter.notifyDataSetChanged();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
s 是到每一個的距離有多遠
那我的 Collections.sort 要如何比對??
參考這篇的例子三
將原本的
...
camperSiteAdapter.notifyDataSetChanged();
...
加一列變成
...
Collections.sort(camperSiteModel, new CamperSiteSort());
camperSiteAdapter.notifyDataSetChanged();
...
另外要定義 ComperSiteSort 如下
class CamperSiteSort implements Comparator<CamperSiteModel>
{
//以 CamperSiteModel 的 distance 升序排列
public int compare(CamperSiteModel a, CamperSiteModel b)
{
return a.distance - b.distance;
}
}