sort a hashmap by the Integer Value desc
如何根据整数值对
埃夫金尼多洛菲耶夫写的和他的回答是这样的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | HashMap<String, Integer> map = new HashMap<String, Integer>(); map.put("a", 4); map.put("c", 6); map.put("b", 2); Object[] a = map.entrySet().toArray(); Arrays.sort(a, new Comparator() { public int compare(Object o1, Object o2) { return ((Map.Entry<String, Integer>) o2).getValue().compareTo( ((Map.Entry<String, Integer>) o1).getValue()); } }); for (Object e : a) { System.out.println(((Map.Entry<String, Integer>) e).getKey() +" :" + ((Map.Entry<String, Integer>) e).getValue()); } |
输出
1 2 3 | c : 6 a : 4 b : 2 |
号
我的问题是,这种类型是如何变成DESC的?如果我想对
最后一个问题是:如何在排序后得到第一个元素?
用于倒序开关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Map<String, Integer> map = new HashMap<>(); map.put("a", 4); map.put("c", 6); map.put("b", 2); Object[] a = map.entrySet().toArray(); Arrays.sort(a, new Comparator() { public int compare(Object o1, Object o2) { return ((Map.Entry<String, Integer>) o1).getValue().compareTo( ((Map.Entry<String, Integer>) o2).getValue()); } }); for (Object e : a) { System.out.println(((Map.Entry<String, Integer>) e).getKey() +" :" + ((Map.Entry<String, Integer>) e).getValue()); } System.out.println("first element is" + ((Map.Entry<String, Integer>) a[0]).getKey() +" :" + ((Map.Entry<String, Integer>) a[0]).getValue()); |
号
哪个指纹
b : 2
a : 4
c : 6
first element is b : 2
号
如果您可以访问lambda表达式,则可以使用这些表达式简化排序:
1 2 |
在Java 8中,你可以这样做:
1 2 3 | System.out.println(map.entrySet().stream().sorted((o1, o2) -> { return o2.getValue().compareTo(o1.getValue()); }).findFirst());//would return entry boxed into optional which you can unbox. |
。
首先,回答你的问题:只需颠倒
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | HashMap<String, Integer> map = new HashMap<String, Integer>(); map.put("a", 4); map.put("c", 6); map.put("b", 2); Object[] a = map.entrySet().toArray(); Arrays.sort(a, new Comparator() { public int compare(Object o1, Object o2) { // just reverse the result of the comparison return -((Map.Entry<String, Integer>) o2).getValue().compareTo( ((Map.Entry<String, Integer>) o1).getValue()); } }); for (Object e : a) { System.out.println(((Map.Entry<String, Integer>) e).getKey() +" :" + ((Map.Entry<String, Integer>) e).getValue()); } |
但是,如果您需要使用已排序的