#android #android-recyclerview #collections #adapter
Вопрос:
Как можно отсортировать расстояние от близкого до дальнего?
Я рассчитаю, как далеко пользователь находится от каждой точки.
это мой код
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("Distance",Math.ceil(s) "");
camperSiteModel1.setDistance(Math.ceil(s));
camperSiteModel.add(camperSiteModel1);
Collections.sort(camperSiteModel,new Comparator<CamperSiteModel>() {
@Override
public int compare(CamperSiteModel o1, CamperSiteModel o2) {
return o1.getCamperSiteName().compareTo(o2.getCamperSiteName());
}
});
}
camperSiteAdapter.notifyDataSetChanged();
}
Я использую этот код, но он не сортирует данные.
Ответ №1:
ну, в случае пользовательских классов вы должны предоставить свой способ их сравнения, подключившись к Collections.sort(camperSiteModel);,
компаратору для сравнения между вашими двумя объектами, чтобы быть похожим на это
Collections.sort(camperSiteModel, new Comparator<CamperSiteModel >() {
@Override
public int compare(CamperSiteModel o1, CamperSiteModel o2) {
// here you should do the comparison between data of your two objects to return an int that indicates if `o1<o2` or `o1>o2` or `o1==o2
return o1.getDist()-o2.getDist(); //incase of int/long
//return o1.getStr().equals(o2.getStr()) // incase of strings
//you should see how to compare between your data the right way where in case your data is a generic type like Integer/Long instead of int/long you would find the `o1.getData().equals(o2.getData())` to be very useful.
}
});
вам следует попробовать поиск Comparator Java
и как его использовать в Google, чтобы узнать больше.
Комментарии:
1. getDist — это (лат., lng) ?
2. это все, что вы хотите, это просто пример метода, который я написал, который вернет значение int/long, которое вы вычитаете, чтобы вернуть значение, указывающее на сравнение между двумя объектами, вы можете делать все, что хотите, внутри метода сравнения, но вы должны возвращать положительное значение int, если o1>o2, отрицательное, если o1>