import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; public class sortMapWithValue { public static void main(String[] args) { Map<String, Number> map = new HashMap<String, Number>(); map.put("aa", 333); map.put("bb", 666); map.put("cc", 11); map.put("dd", 565); map.put("ee", 234); map.put("ff", 1); //根据map的值排序 Map<String, Number> newMap = sortMapWithValue.sortMapByValue(map); //获取map的前多少条记录 Map<String, Number> jieshouMap = sortMapWithValue.getTopMapNumber(newMap, 3); System.out.println(jieshouMap); System.out.println(newMap); } // map结合根据value排序 public static Map<String, Number> sortMapByValue(Map<String, Number> oriMap) { Map<String, Number> sortedMap = new LinkedHashMap<String, Number>(); if (oriMap != null && !oriMap.isEmpty()) { List<Map.Entry<String, Number>> entryList = new ArrayList<Map.Entry<String, Number>>( oriMap.entrySet()); Collections.sort(entryList, new Comparator<Map.Entry<String, Number>>() { public int compare(Entry<String, Number> entry1, Entry<String, Number> entry2) { int value1 = 0, value2 = 0; try { value1 = getInt(entry1.getValue()); value2 = getInt(entry2.getValue()); } catch (NumberFormatException e) { value1 = 0; value2 = 0; } return value2 - value1; } }); Iterator<Map.Entry<String, Number>> iter = entryList.iterator(); Map.Entry<String, Number> tmpEntry = null; while (iter.hasNext()) { tmpEntry = iter.next(); sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue()); } } return sortedMap; } private static int getInt(Number str) { int i = 0; String s = str.toString(); try { Pattern p = Pattern.compile("^\\d+"); Matcher m = p.matcher(s); if (m.find()) { i = Integer.valueOf(m.group()); } } catch (NumberFormatException e) { e.printStackTrace(); } return i; } // 取map前num条 public static Map<String, Number> getTopMapNumber(Map<String, Number> map, int num) { // 保存需要返回的数据 Map<String, Number> maxMap = new HashMap<String, Number>(); List<Map.Entry<String, Number>> list = new LinkedList<Map.Entry<String, Number>>(); list.addAll(map.entrySet()); int flag = 0; for (Iterator<Map.Entry<String, Number>> ite = list.iterator(); ite .hasNext();) { Map.Entry<String, Number> map1 = ite.next(); if (flag < num) { maxMap.put(map1.getKey(), map1.getValue()); flag++; } else { break; } } return maxMap; } }
根据map中的value排序map
原创
©著作权归作者所有:来自51CTO博客作者gggcgba的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java交换map的key和value值
Java交换map的key和value值
键值对 Java System -
java将map中的值放到对象中
java将map中的值放到对象中
Java if语句 java -
[JS] 根据对象属性值value排序
【代码】[JS] 根据对象属性值value排序。
javascript 开发语言 ecmascript 数组 属性值