2010-06-20 9 views
3

Donc je veux trier un tableau de points en utilisant la méthode de tri intégrée, par une coordonnée spécifique, disons x. Comment puis-je faire ceci? Voici un exemple de code:Comment trier un tableau d'objets (Points) en Java?

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

Existe-t-il un comparateur intégré pour les coordonnées x dans Point Class? Sinon, comment puis-je en créer un et l'utiliser. Un exemple serait génial.

Merci.

Répondre

8

Point n'est donc pas donc vous devrez écrire votre propre comparateur et le transmettre lors de l'appel Arrays.sort. Heureusement, ce n'est pas trop dur:

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

S'il vous plaît, utilisez deux <, ==, >. Les gens utilisent la soustraction tout le temps pour cela. L'un d'eux aura une soustraction qui déborde, et boom. –

+0

Pourquoi? Si vous travaillez avec des points sur une interface graphique, alors ça va. Ou vous avez un écran physique de plus de 2 Go de pixels (pour permettre les problèmes de signature). Si c'est vrai, je te déteste! –

+1

C'est un "joli truc de programmeur" d'utiliser la soustraction au lieu de <, >, ==. Rend votre code plus difficile à lire et introduit la possibilité de bogues sans réel bénéfice. Si vous étiez sur mon projet et avez écrit ceci, je vous dirais d'essayer à nouveau ... :) – bwawok

2

Vous pouvez également utiliser Apache Commons Bean Comparator

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

Et puis faire quelque chose comme

import org.apache.commons.beanutils.BeanComparator; 

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

Combien de projets n'ont-ils pas déjà des APACONS communs? Je n'ai pas travaillé sur un grand projet qui ne l'avait pas comme une dépendance quelque part dans la chaîne maven – bwawok

+1

@JarrodRoberson Chill out, il montre une façon intéressante d'abstraire un comparateur par un champ, OP peut écrire un de ses propres si ils choisissent –