Auf Thema antworten

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 ?



Oben