2 w AYS:
- Реализовать интерфейс
Comparable
- Создать
Comparator
С первым способом вы можете сортировать коллекцию только один метод compareTo
вы определите
Ваш Person.java
class Person implements Comparable<Person> {
private String name;
private String profession;
@Override
public int compareTo(Person o) {
return this.profession.compareTo(o.getProfession());
}
public String getName() {
return name;
}
public String getProfession() {
return profession;
}
}
Тогда вам необходимо позвонить:
Collections.sort(yourCollection);
Со вторым способом можно сортировать по одному или нескольким Comparator
, давая вам возможность сравнить тот же набор с различными критериями.
Пример двух Comparator
public class PersonSortByNameComparator implements Comparator<Person>{
@Override
public int compare(Person p1, Person p2) {
return p1.getName().compareTo(p2.getName());
}
}
public class PersonSortByAlphabeticalProfessionComparator implements Comparator<Person>{
@Override
public int compare(Person p1, Person p2) {
return p1.getProfession().compareTo(p2.getProfession());
}
}
Или это один вам нужно:
public class PersonSortByProfessionComparator implements Comparator<Person> {
@Override
public int compare(Person p1, Person p2) {
if(p1.getProfession().equalsIgnoreCase(p2.getProfession())
return 0;
if(p1.getProfession().equalsIgnoreCase("student")
return -1;
if(p1.getProfession().equalsIgnoreCase("engineer")
return 1;
if(p1.getProfession().equalsIgnoreCase("doctor")
return 1;
else
return -1;
}
}
А потом позвонить по одному из них:
Collections.sort(yourCollection, new PersonSortByNameComparator());
This blog article действительно хорошо написана и вы можете некоторые примеры
Какова ваша логика сортировки. Я думаю, что Инженер> Доктор> Учитель> Студент не может использоваться для 'String' – Razib
, может быть, если профессия была enum ... – Blackbelt
есть функция строки по умолчанию, которая сортируется в соответствии с алфавитами –