Map根据value排序ASC DESC

Map根据value排序ASC DESC需求有点刁钻 写关键词组合匹配标题的时候 遇到关键词像这样 XXXXXX1222XX 前面的 XXX 代表关键词 两两组合 后面的数字代表

大家好,欢迎来到IT知识分享网。

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

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; }

把Set传入sortHashSet2List,sort是ASC或者DESC,返回的是转换好的List

bingo!




免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/103712.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信