2010-09-15 3 views
0

Comment puis-je trouver les lignes 4,1 et 6 dans l'exemple ci-dessous?
Et l'utilisation de Collection.sort() avec comparateur est-elle raisonnable dans ce cas?comparateur Java pour la logique simple et personnalisée

 a - b - c - d 

1.) 6 8 16 18 
2.) 38 40 55 57 
3.) 6 8 25 27 
4.) 1 5 11 15 
5.) 6 8 3 5 
6.) 9 12 19 22 
7.) 18 20 1 3 
8.) 23 25 15 17 

exemple sur le dessus est une liste d'objet répond aux critères suivants:
- chaque objet contient quatre nombres entiers (a, b, c, d),
- chaque objet de la liste est unique,
- a < b et c < d. Ci-dessous ne fonctionne pas exemple, mais ma façon de penser, comment je peux attendre que le comparateur fonctionne pour trouver l'objet attendu.

public class Row_Filter implements Comparable<Row_Filter>{ 
    int a,b,c,d; 
    public Row_Filter(int a, int b, int c, int d) { 
     this.a = a; this.b = b; this.c = c; this.d = d; 
    } 
    static class FilterAccordingAB implements Comparator<Row_Filter> { 
     public int compare(Row_Filter o1, Row_Filter o2) { 
      return o2.a - o1.b+1; 
     } 
    } 
    static class FilterAccordingCD implements Comparator<Row_Filter> { 
     public int compare(Row_Filter o1, Row_Filter o2) { 
      return o2.c - o1.d+1; 
     } 
    } 
    static class FilterAccordingABCD implements Comparator<Row_Filter> { 
     public int compare(Row_Filter o1, Row_Filter o2) { 
      FilterAccordingAB abF=null; FilterAccordingCD cdF=null; 
      if((abF.compare(o1, o2)==0) && (cdF.compare(o1, o2)==0)){ 
       return 1; 
      } 
      return -1; 
     } 
    } 
} 
+6

Est-ce que ce serait des devoirs? –

+1

Quelle est la particularité des lignes 1,4 et 6? –

+0

À quels types d'objets avez-vous affaire? ... tant de questions signifie que votre question est mauvaise! – pstanton

Répondre

3

Ce que vous devez faire est de mettre en œuvre une interface Comparator . Recherchez les JavaDocs pour cette interface. Vous devrez écrire une classe que implémente cette interface. Cela implique d'écrire une méthode (vous n'avez pas besoin de réimplémenter equals()).

La méthode obtient deux objets. Regardez quelle valeur vous devez retourner de la méthode pour montrer que les deux objets sont 'égaux' selon vos besoins. Puis écrivez le code pour renvoyer cette valeur quand ils sont «égaux», selon vos besoins.

Si cela n'est pas clair, vous devrez rechercher un manuel Java de base sur les méthodes d'écriture, l'écriture de classes ou l'utilisation d'interfaces.

+0

+1: exactement comment vous implémentez etc. Bien indiqué. – aperkins

0

Il semble que vous soyez confus lorsque vous utilisez un comparateur. DJClayworth décrit exactement comment en créer un. Vous utilisez un, par exemple, un mécanisme de tri:

Collections.sort(myList, myComparator); 

Vous utilisez parce que vous pouvez définir l'algorithme de comparaison pour trier la collection. J'espère que cela aide à clarifier quelque peu.

+0

Merci Aperkins. Je ne suis pas vraiment confus où utiliser le comparateur (en cas de liste). Mais, comment décrire les critères de comparaison au comparateur dans Comparator-Language. – jackdaniels

+0

Vraiment confus je deviens, si l'on pense à la façon de réduire la taille de la liste en fusionnant des objets. En suivant cette méthode, je dois créer une deuxième liste, en itérant à travers les premières valeurs d'adaptation de liste de l'objet apparié et en appelant par chaque méthode Match.sort() de correspondance. Pour une plus grande liste, cela ne semble pas être une solution perfomante. Si quelqu'un est intersted ci-dessous est un lien pour la description initiale de l'ensemble du problème. Lien: http: //stackoverflow.com/questions/3712669/java-extended-collection-filtering – jackdaniels