Hi,
ich hab ein Problem mit dem Sortieren einer Hashmap über ein TreeSet.
Meine HashMap besteht aus einem Objekt Superplayer, und einer zufällig erzeugten IntegerZahl.
[code=Java]
Map<SuperPlayer, Integer> hMap = new HashMap<SuperPlayer, Integer>();
for (int i = 0; i < 5; i ++) {
int val = Zufall.getZufall(100) // liefert eine zufällige Zahl von 0 - 100 zurück
hMap.put( (SuperPlayer) data.getVecPlayer().elementAt( i ), new Integer( val ) );
}
[/code]
Nach füllen der Hashmap soll diese Hashmap nun ordnungsgemäß sortiert werden, und zwar absteigend anhand des HashMap-Values.
[code=Java]
HashMap map = new LinkedHashMap();
List yourMapKeys = new ArrayList( hMap.keySet() );
List yourMapValues = new ArrayList( hMap.values() );
TreeSet sortedSet = new TreeSet( yourMapValues );
Object[] sortedArray = sortedSet.toArray();
int size = sortedArray.length;
System.out.println("SIZE:" + size);
// Sortieren der HashMap in das TreeSet (DESCENDING !!!!)
for ( int i = size; i > 0; )
{
map.put( yourMapKeys.get( yourMapValues.indexOf( sortedArray[--i] ) ), sortedArray[i] );
}
[/code]
Das ganze funktioniert eigentlich. Allerdings gibt es ein Problem, so bald in der ersten Hashmaps zwei SuperPlayer zufällig die selbe Integer Zahl zugeordnet bekamen. int size = sortedArray.length ist dann nämlich 4 und nicht 5. Bei 5 gleichen Zahlen wäre die Size 1.
Als Grundlage für diesen Code diente: Sort an HashMap - Real's Java How-to dieses Beispiel hier.
Es soll natürlich so sein, dass alle Fünf Superplayer anhand der Integer Zahlen sortiert werden, er lässt aber diejenigen Superplayer zahlen, welche eine identische Integer-Zahl haben, außen vor und nimmt nur einen von ihnen.
Kann mir jemand helfen ?