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

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

  1. XXX XXX 1222
  2. XXX XXX 222
  3. XXX XXX 22
  4. XXX XXX 22
  5. XXX XXX 11
  6. XXX XXX 1
  7. XXX XXX 1

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

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

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

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

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

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

  1. /**
  2. * HashSet <"XX XX 123"> 根据123排序
  3. * @param hashSet
  4. * @param sort 排序方式 "ASC","DESC"
  5. * @return 排序好的List
  6. */
  7. private List<String> sortHashSet2List(HashSet<String> hashSet, String sort){
  8. Map<String, Integer> map = new HashMap<String, Integer>();
  9. for (String keyword : hashSet) {
  10. Integer i = keyword.lastIndexOf(" ")+1;
  11. Integer l = keyword.length();
  12. String o = keyword.substring(i,l);
  13. Integer a = Integer.valueOf(o);
  14. map.put(keyword, a);
  15. }
  16. map = sortByValue(map, sort);
  17. List<String> list = new ArrayList<String>();
  18. for(Entry<String, Integer> entry:map.entrySet()){
  19. list.add(entry.getKey());
  20. }
  21. return list;
  22. }
  23. /**
  24. * HashMap按值进行排序
  25. * @param map Map<String,Integer>
  26. * @param sort 排序 ASC正序/DESC倒序
  27. * @return map <String,Integer>
  28. */
  29. private static <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map,String sort) {
  30.  
  31. List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>(map.entrySet());
  32. Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
  33. public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
  34. return (o1.getValue()).compareTo(o2.getValue());
  35. }
  36. });
  37. Map<K, V> result = new LinkedHashMap<K, V>();
  38. if("ASC".equals(sort)){
  39. for (int i = list.size()-1; i >=0; i--) {
  40. result.put(list.get(i).getKey(), list.get(i).getValue());
  41. }
  42. }
  43. if("DESC".equals(sort)){
  44. for (Map.Entry<K, V> entry : list) {
  45. result.put(entry.getKey(), entry.getValue());
  46. }
  47. }
  48. return result;
  49. }
 

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

  1. Oracle查询排序asc/desc 多列 order by

    查询结果的排序 显示EMP表中不同的部门编号. 如果要在查询的同时排序显示结果,可以使用如下的语句: SELECT 字段列表 FROM 表名 WHERE 条件 ORDER BY 字段名1 [ASC|D ...

  2. PostgreSQL 数据库NULL值的默认排序行为与查询、索引定义规范 - nulls first\last, asc\desc

    背景 在数据库中NULL值是指UNKNOWN的值,不存储任何值,在排序时,它排在有值的行前面还是后面通过语法来指定. 例如 -- 表示null排在有值行的前面 select * from tbl or ...

  3. MySQL数据排序asc、desc

    数据排序 asc.desc1.单一字段排序order by 字段名称 作用: 通过哪个或哪些字段进行排序 含义: 排序采用 order by 子句,order by 后面跟上排序字段,排序字段可以放多 ...

  4. C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET

    C++ STL中Map的相关排序操作:按Key排序和按Value排序 - 编程小径 - 博客频道 - CSDN.NET C++ STL中Map的相关排序操作:按Key排序和按Value排序 分类: C ...

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

    map是用来存放<key, value>键值对的数据结构,可以很方便快速的根据key查到相应的value.假如存储学生和其成绩(假定不存在重名,当然可以对重名加以区分),我们用map来进行 ...

  6. Map 根据value 排序

    总是有特殊的需求 ,呵呵 ,一起看看Map 根据value 排序的一个例子吧,还用到了泛型 很不错 此文仅供自己记录笔记. /** * hashmap 根据值排序 */ public static & ...

  7. 搜狗面试的经典题(C++map按值排序,class struct的差别)

    一:起因 (1)java  Map排序(key,value).请看还有一篇博客 java Map排序 (2)c++ map排序(key,value),能够对c++ map和java Map进行对照:之 ...

  8. map根据属性排序、取出map前n个

    /** * map根据value排序 * flag = 1 正序 * flag = 0 倒序 * * @param map * @param flag * @return */ public stat ...

  9. 实现Comparator接口和Comparable接口,以及Map按value排序 ,map遍历

    继承Comparator接口,重写compare()方法 import java.util.ArrayList; import java.util.Arrays; import java.util.C ...

随机推荐

  1. Vue.js——打包之后资源路径产生问题

    https://blog.csdn.net/qq_30632003/article/details/79353035 https://www.cnblogs.com/diantao/p/7776523 ...

  2. asterisk-java ami4 一些基本功能的例子

    比如:挂机,拨号,拨外线,保留通话,示闲,示忙等等.... 在api中可以获得这些方法说明 /**  * 给分机挂机  * @param Extension 要挂机的分机号  * @return  * ...

  3. 8086汇编——Introduction(8086内部寄存器,段寄存器,存储器分段)

    8086汇编--Introduction 一.8086CPU的三种工作模式 实模式:只有低20位地址线起作用,仅能寻址第一个1MB的内存空间.MS DOS运行于该模式下. 保护模式:在该模式下,机器可 ...

  4. 离线缓存 application cache

    1. 什么是离线缓存: 离线缓存可以将站点的一些文件缓存到本地,它是浏览器自己的一种机制,将需要的文件缓存下来,以便后期即使没有连接网络,被缓存的页面也可以展示. 例子:比如我们在手机或电脑上访问一个 ...

  5. django显示图片

    dirctory vickey_django vickey(projectname) vickey __init__.py __pycache__ settings.py urls.py wsgi.p ...

  6. 全国高校绿色计算大赛 预赛第三阶段(Python)(随机数)

    只提交了随机数 (真心不会 T-T ) import csv import random import pandas as pd import numpy as np # 预测结果文件:src/ste ...

  7. 51nod 1175 区间第k大 整体二分

    题意: 一个长度为N的整数序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中,第K大的数是多少. 分析: 仅仅就是一道整体二分的入门题而已,没听说过整体二分? 其实就是一个分治的函数 ...

  8. [Algorithm] 2. Trailing Zeros

    Description Write an algorithm which computes the number of trailing zeros in n factorial. Example 1 ...

  9. Centos7配置ThinkPHP5.0完整过程(一)

    在Centos中配置PHP服务器环境,首先要安装Apache的http服务,然后安装php解析环境,最后再配置ThinkPHP5.0. 首先安装HTTP sudo yum install httpd ...

  10. 自媒体人Chrome浏览器必备插件精选神器!

    自从互联网时代起,浏览器使用从最早的IE,到opera,到猎豹浏览器,到360双核浏览器,到火狐,到safari,到目前最喜欢用的chrome.一路下来,chrome的稳定性与扩展性征服了我,成了我必 ...