Имеется список содержащий массивы
TreeList<String[]> familyRegion=new TreeList();
familyRegion.add(new String[]{"Доктор","Иванов Иван Иванович","12.01.1960","г.Москва"});
familyRegion.add(new String[]{"Тракторист","Сидоров Иван Петрович","12.01.1970","г.Челябинск"});
familyRegion.add(new String[]{"Академик","Артюков Альберт Иванович","14.08.1950","г.Москва"});
familyRegion.add(new String[]{"Стоматолог","Бирюков Петр Иванович","17.01.1960","г.Санкт-Петербург"});
familyRegion.sort(new CompArray());
Необходимо отсортировать список по второму элементу (ФИО) я сделал компаратор
private class CompArray implements Comparator
{
@Override
public int compare(Object o1, Object o2) {
String[]obj1= (String[]) o1;
String[]obj2= (String[]) o2;
return obj1[1].compareTo(obj2[2]);
}
}
Однако он не работает, подскажите, в чем ошибка?
Это вообще неправильный подход. Во-первых, хранить данные о человеке в массиве сток - совсем не вариант. Во-вторых, какого результата вы ожидаете от сортировки списка массивов? Отсортировать каждый массив по алфавиту, а потом отсортировать массивы между сосбо, исходя из алфавитов каждой переменной??? Я даже это сформулировать не могу... И еще, я не знаю, что такое TreeList, может он совсем не гарантирует порядок элементов(как, например, хешсет), поэтому беру стандартную коллекцию для примера. Предлагаю пойти нормальным путем:
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class Book {
public static void main(String[] args) {
List<Person> familyRegion = new ArrayList();
familyRegion.add(new Person ("Доктор", "Иванов Иван Иванович", LocalDate.of(1960, 1, 12), "г.Москва"));
familyRegion.add(new Person ("Доктор", "Иванов Иван Иванович", LocalDate.of(1960, 1, 12), "г.Москва"));
familyRegion.add(new Person ("Тракторист", "Сидоров Иван Петрович", LocalDate.of(1970, 1, 12), "г.Челябинск"));
familyRegion.add(new Person ("Академик", "Артюков Альберт Иванович", LocalDate.of(1950, 8, 14), "г.Москва"));
familyRegion.add(new Person ("Стоматолог", "Бирюков Петр Иванович", LocalDate.of(1960, 1, 17), "г.Санкт-Петербург"));
Collections.sort(familyRegion);
}
}
class Person implements Comparable<Person>{
private final String name;
private final LocalDate birthDate;
private final String city;
private final String profession;
public Person(String profession, String name, LocalDate birthDate, String city) {
this.name = name;
this.birthDate = birthDate;
this.city = city;
this.profession = profession;
}
public String getName() {
return name;
}
public LocalDate getBirthDate() {
return birthDate;
}
public String getCity() {
return city;
}
public String getProfession() {
return profession;
}
@Override
public int compareTo(Person p) {
int compareName = name.compareTo(p.getName());
if (compareName!=0) return compareName;
else return birthDate.compareTo(p.getBirthDate());
}
}
private class CompArray implements Comparator
{
@Override
public int compare(Object o1, Object o2) {
String[]obj1= (String[]) o1;
String[]obj2= (String[]) o2;
return obj1[1].compareTo(obj2[1]);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Не приходят push уведомленияПри отсылке сервер гугла возвращает {"multicast_id":410383576077558298,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1576316927466102%b078b91ff9fd7ecd"}]}...
По значению дает набор цифр :