2012-10-23 6 views
5

Ich dachte daran, indem Sie alle Sätze in eine Liste setzen, die dann in einer Karte wäre, wo der Schlüssel die Größe ist. Ich kenne die maximale Größe, die ein Satz sein könnte (mir gegeben), also kann ich nur zwischen 0 und dieser Zahl iterieren, jede Liste holen und dann durch jede Liste iterieren und jeden Satz in eine Arraylist setzen.Sortiersets in ArrayList nach Größe

Dies scheint jedoch schrecklich klobig - gibt es einen besseren Weg, dies zu tun? Gibt es eine Möglichkeit, eine Komparatorfunktion basierend auf der Größe zu machen?

Dank

Antwort

8

Sie können eine Comparator dafür bereitzustellen. und verwenden Collections.sort()

class SizeComarator implements Comparator<Set<?>> { 

    @Override 
    public int compare(Set<?> o1, Set<?> o2) { 
     return Integer.valueOf(o1.size()).compareTo(o2.size()); 
    } 
} 

    ArrayList<Set<String>> arrayList = new ArrayList<Set<String>>(); 
    Set<String> set1 = new HashSet<String>(); 
    set1.add("A"); 
    set1.add("B"); 
    Set<String> set2 = new HashSet<String>(); 
    set2.add("A"); 
    arrayList.add(set1); 
    arrayList.add(set2); 
    Collections.sort(arrayList, new SizeComarator()); 
    System.out.println(arrayList); 

Ausgang:

[[A], [A, B]] 
+0

hmm so das, was ich bin Sortierung ist wirklich ein Objekt, das als Privat Klasse implementiert wird - ist diese Methode noch gelten? – praks5432

+0

@ praks5432 Hinzugefügt mehr Code, so dass es leicht für Sie zu verstehen ist :) –

+0

Vorsicht vor dieser Implementierung. Ich vermute, dass die gleiche Größe z. Ein 'TreeSet <> # add()' führt dazu, dass Elemente als gleich betrachtet und gelöscht werden. –

2

Neben anderen (absolut gültige) Antwort, werde ich darauf nur, dass Sie nicht brauchen, explizit eine neue Klasse zu definieren, Sie nur schaffen kann man anonym:

Collections.sort(myList, new Comparator<Set<?>>() { 
    @Override 
    public int compare(Set<?> o1, Set<?> o2) { 
     return Integer.valueOf(o1.size()).compareTo(o2.size()); 
    } 
}); 

Of couse, wenn Sie eine solche auf das mit einem Komparator mehrere Male planen, dann würde ich halte es explizit zu definieren.


Relevante javadocs:

Verwandte Themen