2010-06-20 3 views
3

Итак, я хочу сортировать массив точек, используя встроенный метод сортировки, определенной координатой, например x. Как я могу это сделать? Heres пример кода:Как отсортировать массив объектов (точек) в Java?

Point A[] = new Point[10]; 
// ... Initialize etc. 
Arrays.sort(A, x-coordinate); 

Есть ли встроенный компаратор для x-координат в Point Class? Если нет, как я могу создать его и использовать. Пример был бы замечательным.

Спасибо.

ответ

8

Point не Comparable, поэтому вам необходимо написать свой собственный компаратор и передать его при вызове Arrays.sort. К счастью, это не так уж трудно:

class PointCmp implements Comparator<Point> { 
    int compare(Point a, Point b) { 
     return (a.x < b.x) ? -1 : (a.x > b.x) ? 1 : 0; 
    } 
} 

Arrays.sort(A, new PointCmp()); 
+3

Пожалуйста, используйте любые два из <, ==, >. Для этого люди все время используют вычитание. У одного из них будет вычитание, которое переполняется и бум. –

+0

Почему? Если вы работаете с точками в графическом интерфейсе, тогда все в порядке. Или у вас есть физический экран размером более 2G пикселей (чтобы разрешить проблемы с подписью). Если это правда, я тебя ненавижу! –

+1

Это «симпатичный трюк программиста», чтобы использовать вычитание вместо <, >, ==. Делает ваш код труднее читать и вводит возможность ошибок, которые не приносят никакой реальной пользы. Если бы вы были в моем проекте и писали это, я бы сказал вам попробовать еще раз ... :) – bwawok

2

Вы также можете использовать Apache Commons Bean компаратор

http://commons.apache.org/beanutils/apidocs/org/apache/commons/beanutils/BeanComparator.html

А потом сделать что-то вроде

import org.apache.commons.beanutils.BeanComparator; 

Arrays.sort(A, new BeanComparator("x")); 
+1

Сколько проектов еще не имеет apache commons? Я не работал над большим проектом, который не имел его в качестве зависимости где-то вниз по цепочке maven – bwawok

+1

@JarrodRoberson Chill out, он показывает интересный способ абстрагирования компаратора полем, OP может написать один из своих, если они выбирают –

Смежные вопросы