package com.example.first;
import java.util.*;
public class Person implements Comparable
{
private String name;
private int length;
public Person(String name, int length)
{
this.name = name;
this.length = length;
}
public String getName()
{
return this.name;
}
public int getLength()
{
return this.length;
}
public int compareTo(Object o) throws ClassCastException
{
if (o instanceof Person)
{
int length = ((Person)o).getLength();
if (length < this.length) return 1;
else if (length > this.length) return -1;
else return 0;
} else {
throw new ClassCastException("wrong object");
}
}
public static void main(String[] args)
{
Person p1 = new Person("Test1", 20);
Person p2 = new Person("Test2", 19);
List<Person> p = new ArrayList<Person>();
p.add(p1);
p.add(p2);
printList(p);
Collections.sort(p);
printList(p);
}
private static void printList(List<Person> list)
{
for (Iterator<Person> itr = list.iterator(); itr.hasNext();)
{
Person p = itr.next();
System.out.println("Name: " + p.getName());
System.out.println("Age: " + p.getLength());
}
}
}
Чем не подходит внутренний класс? Все равно использоваться он будет через публичный интерфейс.akl, compareTo не подходит, т.к. условий сортировки может быть несколько (по каждому из полей класса, к примеру).
Сделал каждый компаратор отдельным публичным классом.
class Person
{
private Integer age;
private String name;
public static final Comparator<Person> AGE_COMPARATOR =
new Comparator<Person>() {
public int compare(Person a, Person b) {
return a.age.compareTo(b.age); }};
}
Между прочим внутренние классы могут быть и публичными.Добрый вечер. Как правильно написать Comparator к классу? Проблема в том, что класс, к которому пишется Comparator, и вызов сортировки будет в разных пакетах. Поэтому не получится написать внутренний класс, как я обычно делал.
class Person
{
public static class AgeComparator implements Comparator<Person> { }
}
Этот момент я упустил... Спасибо!Между прочим внутренние классы могут быть и публичными.
Код:class Person { public static class AgeComparator implements Comparator<Person> { } }