In HashMap Values sortieren



  • Hi,

    ich habe ein Problem mit einer HashMap. Sie sieht folgendermaßen aus:

    HashMap<Character, ArrayList<Double> > map
    

    Jetzt will ich eine neue Liste erstellen wo die Größe der ArrayListen absteigend sortiert und als weitere Eigenschaft das der arithmetische Mittel als zweites Sortierkriterium genommen wird.
    Also ein kleines Beispiel.

    Input Daten:
    'a', [3 4 5]
    'h', [4 1]
    't', [3 4 6]
    '2', [50]

    Output Daten
    't', 4,333
    'a', 4
    'h', 2.5
    '2', 50

    Hier mein Versuch:

    HashMap<Character, Double> outputMap = new HashMap<Character, Double>();
    
    while (!inputMap.isEmpty()) {
    	Set keySet = inputMap.keySet();
    	Iterator keySetIterator = keySet.iterator();
    
    	int maxSize = 0;
    	Character maxKey = '-';
    
    	while(keySetIterator.hasNext()) {
    		Character key = (Character)keySetIterator.next();
    		if (maxSize < inputMap.get(key).size()) {
    			maxKey = key;
    		}
    	}
    
    	ArrayList<Double> values = inputMap.get(maxKey);
    	double sum = 0;
    	for (int i=0; i<values.size(); i++) {
    	    sum += values.get(i);
    	}
    
    	outputMap.add(maxKey, sum / values.size());
    	inputMap.remove(maxKey);
    }
    

    Wie ihr seht ziemlich hässlich und funktionieren tut es leider auch nicht 😞 Er sortiert nicht richtig. Wie kann man das Problem elegant lösen?

    Gruss,
    foo0815





  • Stichwort TreeMap. Besteht auch aus <K, V>-Paaren und beim erzeugen kannste nen Comparator übergeben. 🤡


Log in to reply