所以我正在读取一个文件,需要计算该文件中的重复数量。我不能存储重复。然后我需要根据发生的顺序显示文件的内容
到目前为止我的代码:
// use hashmap to store the values
Map<String, Integer> myMap = new HashMap<>();
// loop through
for (String line = r.readLine(); line!=null; line = r.readLine()) {
if (myMap.containsKey(line)) {
myMap.put(line, myMap.get(line)+1);
} else {
myMap.put(line, 1);
}
}
我将它们存储在地图中,因为它们具有唯一的键;我面临的问题是我需要按从最大到最小的整数值对它们进行排序。
示例输入:
World
World
World
Hello
Hello
Hello
Hello
预期产出:
Hello
World
答案 0 :(得分:1)
你绝对可以使用TreeMap,但是一个更简单的方法就是导出到ArrayList并通过比较器进行排序,如果你已经在HashMap中使用了所有东西。以下是您将如何实现这一目标:
//This comparator sorts by HashMap values.
Comparator <Map.Entry<String, Integer>> sortCompare =
(Map.Entry<String, Integer> firstValue, Map.Entry<String, Integer> secondValue)
-> secondValue.getValue().compareTo(firstValue.getValue());
//This is the list that will hold each entry from the map.
List<Map.Entry<String, Integer>> orderedList = new ArrayList<>();
//Pulls the data from the existing map.
orderedList.addAll(myMap.entrySet());
//Now all that is left to do is sort with the comparator we made.
Collections.sort(orderedList, sortCompare);
//Now the array list is ordered largest to smallest and you can do whatever with it.
这是我处理排序的方式,因为我不太喜欢TreeMaps,但是如果你想要消除HashMap,你可以做一些研究并使用它们。
答案 1 :(得分:0)
您可以使用TreeMap将唯一字符串作为键和出现次数存储为值。 TreeMap支持自定义比较器,因此您可以编写逻辑来对地图中的每个条目进行排序。