Das ist einfach zu kompliziert. Die Karten sollten nicht die Aufgabe haben, sie nach Wert zu sortieren. Am einfachsten ist es, eine eigene Klasse zu erstellen, die Ihren Anforderungen entspricht.
Im unteren Beispiel sollen Sie TreeMap an der Stelle, an der * steht, einen Komparator hinzufügen. Aber durch Java-API gibt es Komparator nur Schlüssel, nicht Werte. Alle hier genannten Beispiele basieren auf 2 Maps. Ein Hash und ein neuer Tree. Das ist seltsam.
Das Beispiel:
Map<Driver driver, Float time> map = new TreeMap<Driver driver, Float time>(*);
Ändern Sie also die Karte auf diese Weise in ein Set:
ResultComparator rc = new ResultComparator();
Set<Results> set = new TreeSet<Results>(rc);
Sie werden die Klasse Results
,
public class Results {
private Driver driver;
private Float time;
public Results(Driver driver, Float time) {
this.driver = driver;
this.time = time;
}
public Float getTime() {
return time;
}
public void setTime(Float time) {
this.time = time;
}
public Driver getDriver() {
return driver;
}
public void setDriver (Driver driver) {
this.driver = driver;
}
}
und die Klasse Comparator:
public class ResultsComparator implements Comparator<Results> {
public int compare(Results t, Results t1) {
if (t.getTime() < t1.getTime()) {
return 1;
} else if (t.getTime() == t1.getTime()) {
return 0;
} else {
return -1;
}
}
}
Auf diese Weise können Sie leicht weitere Abhängigkeiten hinzufügen.
Und als letzten Punkt werde ich einen einfachen Iterator hinzufügen:
Iterator it = set.iterator();
while (it.hasNext()) {
Results r = (Results)it.next();
System.out.println( r.getDriver().toString
//or whatever that is related to Driver class -getName() getSurname()
+ " "
+ r.getTime()
);
}