原文: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;
}
 

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. 源代码管理SVN的使用

    SVN 全称是Subversion,集中式版本控制之王者 SVN 版本控制,需要自己搭建一个管理代码的服务器,提供开发人员,上传和下载 1.基本介绍 使用环境 要想利用SVN管理源代码,必须得有2套环 ...

  2. Katalon Studio(二) 进阶战の Jenkins集成 analytics.katalon 集成

    本教程只针对Katalon Studio 与CI工具之一Jenkins的集成与脚本集的测试报告可视化简单操作. 1.新建一个job 2.新建一个自由风格的job 3.构建触发器 4.构建Windows ...

  3. PowerShell让系统可以执行.ps1文件,开机,关机,在线时间 , Function自定义函数

    Function Get-ComputerUptimeHistory { $q=' <QueryList> <Query Id="0" Path="Sy ...

  4. ubunut在线音乐比方软件

    今天安装了一个音乐在线播放软件,忍不住要来赞一下, 之前一直都是用网页在线的qq音乐听的,这样就有点感觉不爽了, 今天突然想起来好像在网上看到的在ubuntu下有用网易云音乐的,就上网看了一下 还真的 ...

  5. iTOP-4412开发板-LinuxC-继电器模块的测试例程

    平台:iTOP-4412开发板 实现:继电器模块测试例程 继电器的 C 的测试程序,C 测试程序可以在 Android系统,Qt 系统以及最小 linux 系统上运行,文档以 Android 系统上测 ...

  6. 前复权是从今天的价格倒推 后复权是从上市价格前推 不复权就是原始K线。

    前复权是从今天的价格倒推 后复权是从上市价格前推 不复权就是原始K线.

  7. ALTER USER - 改变数据库用户帐号

    SYNOPSIS ALTER USER name [ [ WITH ] option [ ... ] ] where option can be: [ ENCRYPTED | UNENCRYPTED ...

  8. 安装钩子 SetWindowsHookE

    SetWindowsHookEx 函数将应用程序定义的钩子安装到一个钩链.要将安装一个钩子来监测系统的某些类型的事件.这些事件是与特定的线程或所有线程中调用线程作为同一桌面相关联. Syntax HH ...

  9. CreateWindowEx详解

    语法: HWND CreateWindowEx( DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, ...

  10. js-时间戳转字符串

    function createTime(v){ var now = new Date(v); var yy = now.getFullYear(); //年 var mm = now.getMonth ...