`
ekisstherain
  • 浏览: 171829 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java Map按键排序和按值排序(转)

阅读更多

Map排序的方式有很多种,这里记录下自己总结的两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value)。

 

按键排序(sort by key)

jdk内置的java.util包下的TreeMap<K,V>既可满足此类需求,原理很简单,其重载的构造器之一

有一个参数,该参数接受一个比较器,比较器定义比较规则,比较规则就是作用于TreeMap<K,V>的键,据此可实现按键排序。

 

 
public Map<String, String> sortMapByKey(Map<String, String> oriMap) {  
    if (oriMap == null || oriMap.isEmpty()) {  
        return null;  
    }  
    Map<String, String> sortedMap = new TreeMap<String, String>(new Comparator<String>() {  
        public int compare(String key1, String key2) {  
            int intKey1 = 0, intKey2 = 0;  
            try {  
                intKey1 = getInt(key1);  
                intKey2 = getInt(key2);  
            } catch (Exception e) {  
                intKey1 = 0;   
                intKey2 = 0;  
            }  
            return intKey1 - intKey2;  
        }});  
    sortedMap.putAll(oriMap);  
    return sortedMap;  
}  
  
private int getInt(String str) {  
    int i = 0;  
    try {  
        Pattern p = Pattern.compile("^\\d+");  
        Matcher m = p.matcher(str);  
        if (m.find()) {  
            i = Integer.valueOf(m.group());  
        }  
    } catch (NumberFormatException e) {  
        e.printStackTrace();  
    }  
    return i;  
}  
 
 

按值排序(sort by value)

按值排序就相对麻烦些了,貌似没有直接可用的数据结构能处理类似需求,需要我们自己转换一下。

Map本身按值排序是很有意义的,很多场合下都会遇到类似需求,可以认为其值是定义的某种规则或者权重。

 

 
public Map<String, String> sortMapByValue(Map<String, String> oriMap) {  
    Map<String, String> sortedMap = new LinkedHashMap<String, String>();  
    if (oriMap != null && !oriMap.isEmpty()) {  
        List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(oriMap.entrySet());  
        Collections.sort(entryList,  
                new Comparator<Map.Entry<String, String>>() {  
                    public int compare(Entry<String, String> entry1,  
                            Entry<String, String> 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, String>> iter = entryList.iterator();  
        Map.Entry<String, String> tmpEntry = null;  
        while (iter.hasNext()) {  
            tmpEntry = iter.next();  
            sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());  
        }  
    }  
    return sortedMap;  
}  
 

本例中先将待排序oriMap中的所有元素置于一个列表中,接着使用java.util.Collections的一个静态方法

 

来排序列表,同样是用比较器定义比较规则。排序后的列表中的元素再依次被装入Map,需要注意的一点是为了肯定的保证Map中元素与排序后的List中的元素的顺序一致,使用了LinkedHashMap数据类型,虽然该类型不常见,但是在一些特殊场合下还是非常有用的。

 

 

引用

分享到:
评论

相关推荐

    Java Map按键排序和按值排序

    Java Map按键排序和按值排序 可以java map按照key值排序

    对于java map类排序

    private static SortedMap, Integer&gt; mapSortByKey(Map, Integer&gt; unsort_map) { TreeMap, Integer&gt; result = new TreeMap, Integer&gt;() Object[] unsort_key = unsort_map.keySet().toArray(); Arrays.sort...

    java Map转Bean Bean转Map Map排序

    java Map转Bean Bean转Map Map排序

    Java Map 按值排序

    主要实现Java中Map集合按值排序的几种方法。

    Map参数按ASCII码排序

    将map按ASCII码排序,适用于将请求头的参数转为map,map内可再含有map,递归排序,无遗漏。运行demo里main方法即可进行验证。

    java实现的map排序

    HashMap里面的元素是无序的,要进行排序的话只能是用TreeMap和SortedMap,java实现的map排序

    java map 集合 排序

    这里有几个很经典的Java map 集合排序的例子,大家可以试试

    Java 对象属性map排序示例

    Java 对象属性map排序示例

    java中Map集合的排序方法

    Map中元素存放是无序的 HashMap注意事项: 1,HashMap底层维护一个数组,我们向HashMap中所放置的对象实际上是存储在该数组当中; 2,当向HashMap中put一对键值时,它会根据key的hashCode值计算出一个位置,该位置...

    java一键xml转map,一键map转xml工具类

    java一键xml转map,一键map转xml工具类,代码已封装好,一个方法即可将两种格式文本互转,注意是互转,网上很多只有xml转map,并不支持map转xml

    java Pojo转Map

    jsp上使用object[]看不懂吧?写vo太烦琐了?ok,都交给map吧、本工具类的使命就是让map代替所有的vo,让编程变得更美好。 附有详细的使用例子。 java精英团队十年编程精华。

    java map实例,排序

    java map排序,hashmap,linkedmap,treemap,hashtable

    Java Map排序

    实现Map的排序功能,此文档针对Java开发,。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...

    java循环Map java迭代Map

    Map a = new HashMap(); //方法一 Iterator it = a.entrySet().iterator(); while (it.hasNext()) { Map.Entry pairs = (Map.Entry) it.next(); System.out.println(pairs.getValue()); } //以下方法需要jdk5以上...

    java代码-使用java解决list(Map)排序的问题源代码

    java代码-使用java解决list(Map)排序的问题源代码 ——学习参考资料:仅用于个人学习使用!

    java将xml串转换成Map类型

    将xml串转换成Map类型,如果有重复节点,自动转换为list类型存储,所以最终转换并非绝对Map

    java xml和map互转

    使用dom4j封装的工具类,可以实现 xml to map ,map to xml 互相转换,带属性 不带属性,有根节点 和无根节点都可以转换,具体看测试代码

    java map转实体

    java map转实体可以利用java的反射去封装,于是就在hibernate的工具类下试着封装了下,封装完了之后感觉没必要,这完全就可以提取出来变成一个独立的工具类,而不仅仅局限于hibernate了,这样既可以满足一个hql查询...

    java Map 转为 Obj Obj 转为 Map

    java Map 转为 Obj Obj 转为 Map

    Java Map 按key排序和按Value排序的实现方法

    下面小编就为大家带来一篇Java Map 按key排序和按Value排序的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Global site tag (gtag.js) - Google Analytics