利用redis与比较器实现简单的热门搜索展示功能java

/**
	 * 
	 * @Description 首页搜索 
	 * @param articleTitles 文章标题
	 * @param pageNumber 当前页码
	 * @param pageSize  每页显示条数
	 * @return Map 返回状态与文章列表
	 * Create at: 2019-04-10 08:55:49
	 * @author: ZhangPeng
	 * Revision:
	 *    2019-04-10 08:55:49 - first revision by ZhangPeng
	 *
	 */
	@PostMapping("searchArticle")
	public Map<String,Object> searchArticle(String articleTitles,Integer pageNumber,Integer pageSize){
		Map<String,Object> retMap = new HashMap<String,Object>();
		try {
			//将搜索关键字存入redis
			if(null != redisUtil.get("hotSearch")) {
				TreeMap<String,Integer> treeMap = (TreeMap<String,Integer>)redisUtil.get("hotSearch");
				if(treeMap.containsKey(articleTitles)) {
					treeMap.put(articleTitles, treeMap.get(articleTitles)+1);
				}else {
					treeMap.put(articleTitles,1);
				}
				redisUtil.set("hotSearch", treeMap,60L*60*24*30);
			} else {
				TreeMap<String,Integer> treeMap = new TreeMap<String,Integer>();
				if(treeMap.containsKey(articleTitles)) {
					treeMap.put(articleTitles, treeMap.get(articleTitles)+1);
				}else {
					treeMap.put(articleTitles,1);
				}
				redisUtil.set("hotSearch", treeMap,60L*60*24*30);
			}
			
			Article article = new Article();
			article.setArticleTitle(articleTitles);
			retMap.put("articleList", articleService.getPage(article, pageNumber, pageSize));
			retMap.put("status", 1);
		} catch (Exception e) {
			e.printStackTrace();
			retMap.put("status", 0);
		}
		return retMap;
	}
	
	/**
	 * 
	 * @Description 热门搜索 
	 * @return
	 * Create at: 2019-04-13 09:28:05
	 * @author: ZhangPeng
	 * Revision:
	 *    2019-04-13 09:28:05 - first revision by ZhangPeng
	 *
	 */
	@PostMapping("hotSearch")
	public Map<String,Object>hotSearch(){
		Map<String,Object> retMap = new HashMap<String,Object>();
		try {
			// 降序比较器
		    Comparator<Map.Entry<String, Integer>> valueComparator = new Comparator<Map.Entry<String,Integer>>() {
		        @Override
		        public int compare(Entry<String, Integer> o1,Entry<String, Integer> o2) {
		            // TODO Auto-generated method stub
		            return o2.getValue().compareTo(o1.getValue());
		        }
		    };
			TreeMap<String,Integer> treeMap = (TreeMap<String,Integer>)redisUtil.get("hotSearch");
			List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String,Integer>>(treeMap.entrySet());
			 Collections.sort(list,valueComparator);
			retMap.put("hotSearch", list);
			retMap.put("status", 1);
		} catch (Exception e) {
			retMap.put("status", 0);
			e.printStackTrace();
		}
		return retMap;
	}

简陋!简陋!简陋!不堪入目的代码,至于为啥要用treemap,只是因为我天真的认为treemap的排序是按照value来的,结果被现实狠狠的打脸,它是根据key来排序的,其中从redis中重新取出map的时候强制转换类型会报Type safety: Unchecked cast from Object to TreeMap<String,Integer>警告,不知为何,希望哪位大佬看到这段蹩脚的代码能帮忙解开小弟的疑惑,万分感谢,哎,赶进度,没时间仔细研究,再留一坑;;;;;;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值