2009-06-18 5 views

Répondre

1

Voici l'approche:

  1. Créer une Comparator qui permet de comparer deux des « paires id/liste » - dans ce cas, nous comparons la liste tailles du composant de liste .

  2. Créez un ArrayList de ces "paires id/liste".

  3. Utilisez la méthode Collections.sort pour trier le ArrayList, conformément au Comparator.

Si je comprends bien, il y a une paire id/list. Voici que je fait:

class IdListPair { 
    int id; 
    List<?> list; 

    IdListPair(int id, List<?> list) { 
    this.id = id; 
    this.list = list; 
    } 

    public String toString() { 
    return "id: " + id + "; list: " + list; 
    } 
} 

Le IdListPair fournit un constructeur pour créer la paire id/liste et une méthode toString qui sera utilisé plus tard pour montrer les résultats du tri.

Ensuite, nous avons une section qui crée une ArrayList et trie la liste, en utilisant un Comparator:

List<IdListPair> pairList = new ArrayList<IdListPair>(); 
pairList.add(new IdListPair(0, Arrays.asList(1, 2, 3))); 
pairList.add(new IdListPair(1, Arrays.asList(1))); 
pairList.add(new IdListPair(2, Arrays.asList(1, 2))); 

System.out.println("Before: " + pairList); 

Collections.sort(pairList, new Comparator<IdListPair>() { 
    public int compare(IdListPair o1, IdListPair o2) { 
    return o1.list.size() - o2.list.size(); 
    } 

    public boolean equals(Object o) { 
    return false; 
    } 
}); 

System.out.println("After: " + pairList); 

Au début, un ArrayList a été créé avec IdListPair qui a des listes de longueurs différentes. Ensuite, la méthode Collections.sort effectue un tri selon les règles fournies par le Comparator. Une classe implémentant Comparator doit fournir les méthodes compare et equals.

Ici, un Comparator a été fait il comparera la size du list que chaque objet contient IdListPair dans la méthode compare. La méthode equals est une méthode fictive car elle n'est pas utilisée ici.

La plupart des efforts va venir par écrit la méthode compare correcte, de sorte que le trieur de Collections.sort peut correctement trier la liste.

Les résultats sont les suivants:

Before: [id: 0; list: [1, 2, 3], id: 1; list: [1], id: 2; list: [1, 2]] 
After: [id: 1; list: [1], id: 2; list: [1, 2], id: 0; list: [1, 2, 3]] 
Questions connexes