Order a HashMap based on Values
本问题已经有最佳答案,请猛点这里访问。
因此,我正在读取一个文件,需要计算该文件中的重复数。我不能存储副本。然后我需要根据出现的顺序显示文件的内容
迄今为止我的代码:
1 2 3 4 5 6 7 8 9 10 11 |
我将它们存储在地图中,因为它们有唯一的键;我面临的问题是,我需要按整数的值从最大到最小对它们进行排序。
示例输入:
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支持自定义比较器,因此您可以编写逻辑来对映射中的每个条目进行排序。