Я работаю с отображением <String,Integer>
, Имя (уникальное) и класс.Я сортировал так, чтобы наивысшая оценка была на первом месте (с ее ключевым значением).Однако в случае, если две оценки одинаковы, мне нужно, чтобы они были напечатаны в алфавитном порядке.
До сих пор я получил это, которое сортирует по значению в порядке убывания:
public <String, Integer extends Comparable<? super Integer>> Map<String, Integer> sortByValue(Map<String, Integer> map) {
List<Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
list.sort(Entry.comparingByValue());
//actually need descending order, so use comparator to change from natural ordering
Comparator comparator = Collections.reverseOrder();
list.sort(Entry.comparingByValue(comparator));
Map<String, Integer> result = new LinkedHashMap<>();
for (Entry<String, Integer> entry : list) {
result.put(entry.getKey(), entry.getValue());
}
return results;
}
Возможно, я пытался работать, копируя в ArrayList, хотя я чувствую себя в тупике:
List<String> listnames = new ArrayList<>();
for(String names : result.keySet()){
listnames.add(names);
}
List<Integer> listgrades = new ArrayList<>();
for(Integer grades : result.values()){
listgrades.add(grades);
}
for (int i = 0 ; i<result.size() ; i ++){
if(listgrades.get(i).equals(listgrades.get(i+1))){
result.get(listgrades.);
//.....
}
}
Любая помощь / советы приветствуются!