2017-03-31 22 views
0

Ich habe eine Klasse, die die Gym enthält folgende Felder:Wie sortiere ich eine Sammlung von Objekten?

private int id; 

private String name; 

private String street; 

private String housenumber; 

private String zipcode; 

private String lat; 

private String lng; 

private String city; 

Alle Daten in einer Datenbank. Ein Benutzer kann Fitnessstudios nach bestimmten Kriterien filtern: Sport und Distanz. Ich habe eine Funktion, die alle Fitnessstudios aus der Datenbank holt und sie zu einem Layout hinzufügt. Die Felder lat und lng sind ebenfalls in der Datenbank enthalten.

Wenn ein Benutzer alle Turnhallen der Abstand zwischen dem Benutzer und der Position berechnet wird, mit dem folgenden Code:

double distance = Math.round(gpsHelper.calculateDistance(location.getLatitude(), Double.valueOf(gym.getLat()), 
       location.getLongitude(), Double.valueOf(gym.getLng()), 0.0, 0.0)); 
DecimalFormat df = new DecimalFormat("#.##"); 
String formattedDistance = "Afstand: " + String.valueOf(df.format(distance)) + " km"; 

Was ich ist folgendes tun möchte: Ich möchte alle sortieren die Turnhallen durch ihre Entfernung zum Benutzer. Also sortiere sie nach df.format(distance).

Könnte mir jemand einen Stoß in die richtige Richtung geben? Ich denke, ich habe den relevanten Code hinzugefügt.

+1

können Sie vereinfachen Ihr Beispiel sein kann? wie etwas kleiner und leicht überprüfbar? – Eugene

+0

Wenn Sie eine Liste von Fitnessstudios haben (Liste , dann sollten Sie compareTo in der Gym-Klasse überschreiben (das heißt, Ihre Gym-Klasse sollte das Comparable-Interface implementieren). –

+0

"Sortieren nach jedem unebenen Index" - bitte erklären, was das ist Eigentlich, wenn Sie eine 'List Liste 'haben, würden Sie sie über' Collections.sort (list, someComparator) 'sortieren, wobei' someComparator' eine Implementierung von 'Comparator ' ist. (Sie könnten auch '' machen Gym "implementieren" Comparable ", aber das würde Ihnen nur erlauben, nach einer genauen Reihenfolge zu sortieren, zB Name _oder_ Distanz. Wenn Sie beide oder beide benötigen, brauchen Sie einen Komparator." – Thomas

Antwort

4

Collections.sort

Collections.sort(List<T> list) sortiert die angegebene Liste in aufsteigender Reihenfolge, nach der natürlichen Ordnung ihrer Elemente.

Zum Beispiel:

List<String> fruits = new ArrayList<String>(); 

fruits.add("Pineapple"); 
fruits.add("Apple"); 
fruits.add("Orange"); 
fruits.add("Banana"); 

Collections.sort(fruits); 

int i=0; 
for(String temp: fruits){ 
    System.out.println("fruits " + ++i + " : " + temp); 
} 

Wird als Ausgang geben:

fruits 1 : Apple 
fruits 2 : Banana 
fruits 3 : Orange 
fruits 4 : Pineapple 

Andere Beispiele an: Java object sorting example (Comparable and Comparator).

Vergleicher

Comparator ist eine Vergleichsfunktion, die auf einige Sammlung von Objekten eine totale Ordnung auferlegt. Vergleicher können an eine Sortiermethode übergeben werden (z. B. Collections.sort oder Arrays.sort), um eine genaue Kontrolle über die Sortierreihenfolge zu ermöglichen.

Collections.sort(people, new Comparator<Person>() { 

    @Override 
    public int compare(Person o1, Person o2) { 
     return o1.getLastName().compareTo(o2.getLastName()); 
    } 
}); 

Lambda-Ausdrücke

Java 8 eingeführt Lambda Expressions und die Comparator ‚s entspricht:

Comparator<Person> people = 
    (Person o1, Person o2)->o1.getLastName().compareTo(o2.getLastName()); 
Verwandte Themen