生活不易、且行且珍惜。网站首页 程序人生
Java中对map按key或val排序
发布时间:2019-06-25 11:35编辑:zj 阅读:文章分类: Java互动QQ群:170915747
首先先看下Java中的Collections.sort()排序方法:
Collections是一个工具类,sort是其中的静态方法,是用来对List类型进行排序的,它有两种参数形式:
public static <T extends Comparable<? super T>> void sort(List<T> list) { list.sort(null); }
public static <T> void sort(List<T> list, Comparator<? super T> c) { list.sort(c); }
通过实现Comparator接口的compare方法来完成自定义排序
Comparator 的使用有两种方式:
Collections.sort(list,Comparator<T>);
list.sort(Comparator<T>);
其实主要是看 Comparator 接口的实现,重写里面的 compare 方法。代码如下:
//自定义排序1 Collections.sort(list, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.getId() - o2.getId(); } });
compare(Student o1, Student o2) 方法的返回值跟 Comparable<> 接口中的 compareTo(Student o) 方法 返回值意思相同。另一种写法如下:
//自定义排序2 list.sort(new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.getId() - o2.getId(); } });
根据Map<key, val>中的key排序map,排序完成后放进linkedHashMap中,也可以放在List<对象>中,因为map的话,返回到前端顺序会乱。
/** * 按key排序(sort by key). * * @param oriMap 要排序的map集合 * @param isAsc(true:升序,false:降序) * @return */ private Map<String, Long> sortMapByKey(Map<String, Long> oriMap, final boolean isAsc) { Map<String, Long> sortedMap = new LinkedHashMap<String, Long>(); if (oriMap != null && !oriMap.isEmpty()) { List<Map.Entry<String, Long>> entryList = new ArrayList<Map.Entry<String, Long>>(oriMap.entrySet()); Collections.sort(entryList, new Comparator<Map.Entry<String, Long>>() { public int compare(Entry<String, Long> entry1, Entry<String, Long> entry2) { String key1 = entry1.getKey(); String key2 = entry2.getKey(); // 判定 int rst = 0; if (isAsc) { rst = key1.compareTo(key2); } else { rst = key2.compareTo(key1); } return rst; //1大于;0等于;-1小于 } }); Iterator<Map.Entry<String, Long>> iter = entryList.iterator(); Map.Entry<String, Long> tmpEntry = null; while (iter.hasNext()) { tmpEntry = iter.next(); sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue()); } } return sortedMap; }
根据val排序
/** * 按值排序(sort by value). * * @param oriMap 要排序的map集合 * @param isAsc(true:升序,false:降序) * @return */ private Map<String, Long> sortMapByValueLong(Map<String, Long> oriMap, final boolean isAsc) { Map<String, Long> sortedMap = new LinkedHashMap<String, Long>(); if (oriMap != null && !oriMap.isEmpty()) { List<Map.Entry<String, Long>> entryList = new ArrayList<Map.Entry<String, Long>>(oriMap.entrySet()); Collections.sort(entryList, new Comparator<Map.Entry<String, Long>>() { public int compare(Entry<String, Long> entry1, Entry<String, Long> entry2) { long value1 = 0, value2 = 0; try { value1 = entry1.getValue(); value2 = entry2.getValue(); } catch (NumberFormatException e) { value1 = 0; value2 = 0; } // 判定 long rst = 0; if (isAsc) { rst = value1 - value2; } else { rst = value2 - value1; } return (int)rst; } }); Iterator<Map.Entry<String, Long>> iter = entryList.iterator(); Map.Entry<String, Long> tmpEntry = null; while (iter.hasNext()) { tmpEntry = iter.next(); sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue()); } } return sortedMap; }
#去评论一下
标签:#Collection
版权声明:本博客的所有原创内容皆为作品作者所有
转载请注明:来自ZJBLOG 链接:www.zjhuiwan.cn
+1
「万物皆有时,比如你我相遇」
感谢大佬打赏【请选择支付宝或微信,再选择金额】
使用微信扫描二维码完成支付