我做了这样的地图:
Map <Integer, Integer> hm = new HashMap<Integer, Integer>();
for(int i = 0; i<courses.size(); i++){
int occurrences = Collections.frequency(subs, courses.get(i).getCourseId());
hm.put(i+1, occurrences);
}
System.out.println("map:");
System.out.println(hm);
该映射包含整数,一个是课程ID,一个是该课程在我数组中出现的次数。但是现在的输出是:
map:
{1=3, 2=2, 3=4}
我需要获取最高值(因此我需要第二个整数值)。我试图对有效的地图进行排序,然后输出如下:
{3=4, 1=3, 2=2}
但是,我需要获取最高值并将它们返回其他值。
我想要的输出是:
3, 1, 2
当然。
感谢您的提前帮助!
编辑:我将代码更改为此:
Map <Integer, Integer> hm = new TreeMap<Integer, Integer>();
for(int i = 0; i<courses.size(); i++){
int occurrences = Collections.frequency(subs, courses.get(i).getCourseId());
hm.put(occurrences, i+1);
}
并使用以下命令打印值:
hm.values();
然后我的输出是:
[2,1,3]
我需要我的输出是[3,1,2]。
最佳答案
LinkedHashMap
保留插入顺序。
输出:
Key : 3 Value : 4
Key : 1 Value : 3
Key : 2 Value : 2
码:
import java.util.*;
class SortMapValues {
public static boolean ASC = true;
public static boolean DESC = false;
public static void main(String[] args) {
// Creating dummy unsorted map
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(1, 3);
map.put(2, 2);
map.put(3, 4);
Map<Integer, Integer> sortedMapDesc = sortByComparator(map, DESC);
printMap(sortedMapDesc);
}
private static Map<Integer, Integer> sortByComparator(Map<Integer, Integer> map, final boolean order) {
List<Entry<Integer, Integer>> list = new LinkedList<Entry<Integer, Integer>>(map.entrySet());
// Sorting the list based on values
Collections.sort(list, new Comparator<Entry<Integer, Integer>>() {
public int compare(Entry<Integer, Integer> o1,
Entry<Integer, Integer> o2) {
if (order) {
return o1.getValue().compareTo(o2.getValue());
}
else {
return o2.getValue().compareTo(o1.getValue());
}
}
});
// Maintaining insertion order with the help of LinkedList
Map<Integer, Integer> sortedMap = new LinkedHashMap<Integer, Integer>();
for (Entry<Integer, Integer> entry : list) {
sortedMap.put(entry.getKey(), entry.getValue());
}
return sortedMap;
}
public static void printMap(Map<Integer, Integer> map) {
for (Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println("Key : " + entry.getKey() + " Value : "+ entry.getValue());
}
}
}