Map根据value排序ASC DESC

原文:http://blog.csdn.net/k21325/article/details/53259180

需求有点刁钻,写关键词组合匹配标题的时候,遇到关键词像这样

XXX XXX 1222
XXX XXX 222
XXX XXX 22
XXX XXX 22
XXX XXX 11
XXX XXX 1
XXX XXX 1

前面的XXX 代表关键词,两两组合,后面的数字代表优先级,优先级高的优先匹配

那么问题来了,每匹配到一个词组,要提取出来,作为新的匹配词组表,这个步骤就肯定了顺序是乱的,且有重复,

通过Set去重之后,我们的需求是这样,要按照后面的优先级排序,优先级高的在前面

这时候我就想到了要用Map放Key Value,问题就在这,key不能放优先级的数字,因为有重复值,而整条匹配词组是没有重复值的,so,map值就编程了这样

["XXX XXX 1222":1222,"XXX XXX 222":222,...]  

重点就在这了,根据map的value值给map排序

/**
     * HashSet <"XX XX 123"> 根据123排序
     * @param hashSet
     * @param sort 排序方式 "ASC","DESC"
     * @return 排序好的List
     */
    private List<String> sortHashSet2List(HashSet<String> hashSet, String sort){
        Map<String, Integer> map = new HashMap<String, Integer>();
        for (String keyword : hashSet) {
            Integer i = keyword.lastIndexOf(" ")+1;
            Integer l = keyword.length();
            String o = keyword.substring(i,l);
            Integer a = Integer.valueOf(o);
            map.put(keyword, a);
        }
        map = sortByValue(map, sort);
        List<String> list = new ArrayList<String>();
        for(Entry<String, Integer> entry:map.entrySet()){
            list.add(entry.getKey());
        }
        return list;
    }
    /**
     * HashMap按值进行排序
     * @param map Map<String,Integer>
     * @param sort 排序 ASC正序/DESC倒序
     * @return map <String,Integer>
     */
    private static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map,String sort) {

        List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>(map.entrySet());
        Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
            public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
                return (o1.getValue()).compareTo(o2.getValue());
            }
        });
        Map<K, V> result = new LinkedHashMap<K, V>();
        if("ASC".equals(sort)){
            for (int i = list.size()-1; i >=0; i--) {
                result.put(list.get(i).getKey(), list.get(i).getValue());
            }
        }
        if("DESC".equals(sort)){
            for (Map.Entry<K, V> entry : list) {
                result.put(entry.getKey(), entry.getValue());
            }
        }
        return result;
    }
时间: 2024-08-13 09:35:37

Map根据value排序ASC DESC的相关文章

C++基础之map按key排序

在项目当中有要用到map按key排序的需求,就在百度上搜了一下: typedef pair<int,int> PAIR; int cmp(const PAIR& x, const PAIR& y) { return x.second < y.second; } map<int,int> imgdis; //待排序对象,根据double值排序 imgdis[1] = 3; imgdis[10] = 1; imgdis[3] = 5; imgdis[12] = 4

c++map按value排序--将map的pair对保存到vector中,然后写比较仿函数+sort完成排序过程。

map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行存储就是个不错的选择. 我们这样定义,map<string, int>,其中学生姓名用string类型,作为Key:该学生的成绩用int类型,作为value.这样一来,我们可以根据学生姓名快速的查找到他的成绩. 但是,我们除了希望能够查询某个学生的成绩,或许还想看看整体的情况.我们想把所有同学和他

map 按key排序 按value排序

http://blog.csdn.net/iicy266/article/details/11906189 这篇文章很好,提醒我们熟悉函数原型的重要性 map 按key排序 按value排序,码迷,mamicode.com

搜狗面试的经典题(map按值排序)

一:起因 (1)java  Map排序(key,value),请看另一篇博客 java Map排序 (2)c++ map排序(key,value),可以对c++ map和java Map进行对比:之一,c++的map默认按照key值进行排序,而且就是map了:java Map HashMap是随 机的,不进行排序的.之二,c++声明对象直接Map map(^)的,不用= new的 (3)c++ 按value值排序,map是不能直接排序的,它虽然也是一个数据集合,第一反应是利用stl中提供的sor

沃老师学生的成绩+stl string 的删除操作,加map的自动排序

题目链接 思路:stl大法好 将字符的末尾0给去掉,然后比较string的大小,同时用map的自动排序将名字按照字典序输出,>>>stl大法好 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<map> #include<set> #include<vector> using namespa

注意使用 BTREE 复合索引各字段的 ASC/DESC 以优化 order by 查询效率

tbl_direct_pos_201506 表有 190 万数据.DDL: CREATE TABLE `tbl_direct_pos_201506` ( `acq_ins_code` char(13) NOT NULL DEFAULT '' COMMENT '机构代码', `trace_num` char(6) NOT NULL DEFAULT '' COMMENT '跟踪号', `trans_datetime` char(10) NOT NULL DEFAULT '' COMMENT '交易时

Java Map按Value排序

Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法.    HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的v

Map按照条件排序输出

需求: /** * Map进行多条件排序输出* 水果具有好吃不好吃难吃属性.* 入口Map * 首先按照好吃不好吃难吃排序* 然后按照水果的标志Id排序* 出口Map * * 2016年8月14日*/ 1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.Comparator; 4 import java.util.HashMap; 5 import java.util.Iterator;

java按照map的value排序 转载http://blog.csdn.net/tsingheng/article/details/7909861

java的TreeMap可以排序,只可惜是按照key来排序的,或者重写其他Map的排序算法也都是按照key来排序的,下面贴出来一个按照value排序的算法: [java] view plaincopy public class SortMap { public static void main(String[] args) throws Exception { // TODO code application logic here Map<String, Integer> myMap = ne