2012-11-14 14 views
8

Ich weiß, dass eine Arraylist alphabetisch sortieren kann, wenn sie Zeichenfolgen sind, aber was ist, wenn sie etwas komplexer sind wie ein Datenobjekt mit zwei oder mehr Variablen einschließlich einer String. Gibt es eine Möglichkeit, sie dann zu sortieren?Arraylist von komplexen Objekten alphabetisch sortieren

Wenn es keinen Weg mit Collections gibt, dann kann ich mir vorstellen, einen for-Schleife oder Standardsortieralgorithmus zu machen, um die Zeichenfolgenvariable jedes Objekts zu betrachten und den Index des Objekts im Array zu verschieben.

Aber ich habe mich gefragt, vor allem, wenn ich etwas über die Collections Methoden übersehen

+0

Die Guava Bibliothek hat eine große out-of-the -box-Unterstützung für die Erstellung von Comparator Comparators. Hör zu. –

+0

dies könnte auch helfen http://StackOverflow.com/questions/2839137/how-to-use-comparator-in-java-to-sort – Adrian

+0

Das Lesen der JavaDoc wird Sie in die richtige Richtung zeigen. – Raedwald

Antwort

26

Verwendung the function taking as second parameter a Comparator.

Mit dieser Option können Sie eine Instanz von Comparator übergeben, die nach Ihren Anforderungen sortiert wird. Beachten Sie, dass die javadoc of Comparator Richtlinien zum Aufbau von Komparatoren enthält.

Sie können den Vergleicher als anonyme Klasse definieren, wenn er nur lokal verwendet wird. Hier ist ein Beispiel, wo ich sortieren Objekte zu einem ihrer Felder in Bezug auf das ist ein String:

Collections.sort(groupResults, new Comparator<ProductSearchResult>() { 
    public int compare(ProductSearchResult result1, ProductSearchResult result2) { 
     return result1.product.getRsId().compareTo(result2.product.getRsId()); 
    } 
}); 

Alternativ könnten Sie auch Ihre Klasse implementieren die Comparable Schnittstelle machen, aber das macht nur Sinn, wenn Sie eine natürliche definieren (offensichtliche) Auftrag.

+1

Auch bei der Implementierung von Comparable ist dies sinnvoll, wenn Sie Listen des Typs immer auf die gleiche Weise bestellen möchten. Wenn Sie eine andere Reihenfolge in verschiedenen Situationen haben möchten, sollten Sie einen Comparator in Collections.sort() übergeben. –

+2

danke das war das am meisten auf den Punkt Beispiel von Comparator, den ich gesehen habe – CQM

12

Ich würde eine innere Klasse Umsetzung der Komparator-Schnittstelle erstellen:

public class Car { 
public double horsePower; 

class CarHorsePowerComparator implements Comparator<Car> { 
    @Override 
    public int compare(Car car1, Car car2) { 
     return Integer.valueOf(car.horsePower).compareTo(Integer.valueOf(car2.horsePower))   } 
    } 
} 

Nun, wenn Sie Ihre Auto-Liste von Pferdestärke sortieren möchten:

List<Car> list = new ArrayList<Car>(myCars); //your Car list 
Collections.sort(list, new CarHorsePowerComparator()); 
Verwandte Themen