关于java:根据值排序HashMap

Order a HashMap based on Values

本问题已经有最佳答案,请猛点这里访问。

因此,我正在读取一个文件,需要计算该文件中的重复数。我不能存储副本。然后我需要根据出现的顺序显示文件的内容

迄今为止我的代码:

1
2
3
4
5
6
7
8
9
10
11
    // 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);
        }
    }

我将它们存储在地图中,因为它们有唯一的键;我面临的问题是,我需要按整数的值从最大到最小对它们进行排序。

示例输入:

1
2
3
4
5
6
7
World
World
World
Hello
Hello
Hello
Hello

预期输出:

1
2
Hello
World


当然可以使用treemap,但是如果已经在hashmap中处理了所有内容,那么更简单的方法就是导出到arraylist并通过comparator进行排序。以下是您将如何实现这一目标:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//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,但是如果你想消除散列图,你可以做一些研究和使用它们。


可以使用treemap将唯一字符串存储为键,并将出现次数存储为值。Treemap支持自定义比较器,因此您可以编写逻辑来对映射中的每个条目进行排序。