I have a HashMap<String, Integer>
containing words along with their frequencies. I need to now convert this HashMap
into an ArrayList
of just the words, discarding of the frequencies, but i also want the ArrayList
to be sorted in descending order of words by frequency.
Does anyone know an efficient way to do this?
HashMap
has a convenient method called entrySet()
, which lets you access a collection of key-value pairs. You can use it to construct a List<Map.Entry<String,Integer>>
.
Now you have something you can sort. Use a sort method with a custom comparator, which orders entries with higher frequencies toward the beginning of the list.
With a sorted list in hand, all you need to do is walk it, and harvest the words which are now in the proper order.
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());
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加