Я сортирую массив настраиваемых объектов (ListData[]
) по двум полям. Я хочу, чтобы он был отсортирован по теме, а их по имени. Я думал, что сделал хороший компаратор в классе пользовательских объектов и что я могу использовать Arrays.sort(ld)
, чтобы заставить мой код работать и сортировать мой массив. Но, видимо, я что-то делаю не так ...
Мой настраиваемый объект:
public class ListData implements Comparable<ListData>{
public int venueID;
public String name;
public String photoUrl;
public String tip;
public String theme;
@Override
public int compareTo(ListData ld0) {
return this.venueID- ld0.venueID;
}
public static Comparator<ListData> ListDataThemeAndNameComparator = new Comparator<ListData>() {
@Override
public int compare(ListData ld1, ListData ld2) {
String compareTheme1 = ld1.theme.toUpperCase();
String compareTheme2= ld2.theme.toUpperCase();
String compareName1 = ld1.name.toUpperCase();
String compareName2= ld2.name.toUpperCase();
//ascending
int comp = compareTheme1.compareTo(compareTheme2); // comp themes
if(comp==0){ // same theme
comp= compareName1.compareTo(compareName2); // compare names
}
return comp;
}
};
}
И в своей основной деятельности у меня есть:
ListData ld[]= new ListData[jsonResponse.size()];
(some code filling my ListData array)
Arrays.sort(ld, ListData.ListDataThemeAndNameComparator); // compare by theme and then by name
Кто-нибудь знает, что я делаю не так?
Я отредактировал свой код , но он все равно не работает, теперь на исключении nullpointe на compareTheme1 = ld1.theme.toUpperCase();
. Но я уверен, что мой массив не пуст, я записал его в строку перед сортировкой, и она заполнена примерно 500 элементами.
1 ответ
Ваш объект ListData
должен реализовывать интерфейс Comparable
, а не Comparator
.
EDIT:
Чтобы прояснить ситуацию, вы можете отсортировать array
по Array.sort()
. Чтобы сделать настраиваемую сортировку, вы можете указать свой компаратор в Array.sort()
, если вы этого не сделаете, массив будет отсортирован в естественном порядке, который вы можете определить, реализовав интерфейс Comparable
. Итак, у вас есть два варианта пользовательской сортировки:
- используя пользовательский компаратор и указав его в
Array.sort()
- путем реализации интерфейса
Comparable
для ваших элементов
Я предлагаю вам продолжить реализацию Comparable
. Вы экономите память, не создавая новых объектов компаратора, и Comparator
полезен, если вы сравниваете объекты разных типов, что не в вашем случае.
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.