2013-05-03 3 views
2

Скажем, у меня есть массив, который хранит 10 объектов, каждый с 3 значениями должны представлять собой таблицу ЛигаСортировка массива объектов более чем одного поля

Team1 20 5 
Team2 21 6 
Team3 21 8 
Team4 23 8 

Хочу сортировать по первому значению (точки) а затем вторым значением (разностью мячей).

Arrays.sort() будет работать, если я переопределяю compareto() и напишу часть пользовательского кода.

Есть ли более простой способ? Преобразование в список и т. Д.?

ответ

9

Создание Comparator - правильный способ решить эту проблему. Используете ли вы тогда Arrays.sort() или Collections.sort() зависит от вас.

Я бы предположил, что первая избегает преобразования в список и, следовательно, предпочтительнее.

Я рекомендую вам не решить эту проблему, реализовав в вашем объекте Comparable, поскольку это звучит как проблема с отображением и встраивание порядка сортировки в самом объекте, вероятно, неразумно.


Пример (непроверенные) реализация может быть:

public class ExampleComparator implements Comparator<YourObject> { 

    public int compare(YourObject o1, YourObject o2) { 
    if (o1 == null || o2 == null) { 
     throw new NullPointerException(); 
    } 

    if (o1.getValue1() != o2.getValue1()) { 
     return Integer.compare(o1.getValue1(), o2.getValue1()); 
    } 

    return Integer.compare(o1.getValue2(), o2.getValue2()); 
    } 
} 
+0

Я пытался писать собственный код в моем сравнении с (который, кажется, работает) Я заинтересован в использовании компаратора хоть. Есть ли какие-то основные примеры? –

+0

@DavidA См. Правки для примера реализации. См. Google для различных примеров в реальном мире. –

0

Существует не generic в Java, что позволит выполнять сортировки с несколькими параметрами. Вы должны реализовать свой собственный алгоритм сортировки или создать свой собственный Comparator. Для получения дополнительной информации у вас должен быть look at this post.

0

Для этого нет доступа; преобразовать ваши данные в класс и переопределить метод compareTo.

Class Bean implements Comparable<Bean>{ 
    //attributes 
    @Override 
    public int compareTo(Object o) { 
    // TODO Auto-generated method stub 
    return 0; 
} 
} 

Затем вы можете поставить вас объект боба в списке и сделать сортировкой ..

List<Bean> list = new ArrayList<Bean>(); 
Смежные вопросы