HashMap
имеет удобный способ под названием entrySet()
, который позволяет получить доступ к наборам пар ключ-значение. Вы можете использовать его для построения List<Map.Entry<String,Integer>>
.
Теперь у вас есть что-то, что вы можете сортировать. Используйте метод сортировки с пользовательским компаратором, который заказывает записи с более высокими частотами в начало списка.
С отсортированным списком в руке все, что вам нужно сделать, это пройти его и собрать слова, которые теперь находятся в правильном порядке.
List<Map.Entry<String,Integer>> entries = new ArrayList<Map.Entry<String,Integer>>(
freqMap.entrySet()
);
Collections.sort(
entries
, new Comparator<Map.Entry<String,Integer>>() {
public int compare(Map.Entry<String,Integer> a, Map.Entry<String,Integer> b) {
return Integer.compare(b.getValue(), a.getValue());
}
}
);
for (Map.Entry<String,Integer> e : entries) {
// This loop prints entries. You can use the same loop
// to get the keys from entries, and add it to your target list.
System.out.println(e.getKey()+":"+e.getValue());
}
Demo.
это довольно стандартный запрос, вы должны легко можно найти материал в Интернете. Вы еще что-нибудь пробовали? Например, – Michael
можно создать класс 'Word', который содержит' String' и частоту и реализует интерфейс 'Comparable', сравнивающий объекты' Word' по их частоте. Затем заполнить 'ArrayList' из 'HashMap', а затем вызвать' Collections.sort (yourArrayList) ' –
nem035
. Недавно у меня было точное назначение. Я не знаю, является ли это лучшим решением, но вместо 'Map' Я использовал 'ArrayList ', где' MyClass' содержит 'String word' и' int/double frequency' , Затем вы можете использовать 'Collections.sort (yourList, новый Comparator () {@Override public int compare (MyClass mc1, MyClass mc2) {...}});' для сортировки –