模糊标签查询并使用比较器

/**
	 * 模糊标签查询答案  实现类
	 * @return
	 */
	@Override
	public List<AiKapQA> queryListByIssueTag(List<String> tags, Integer puserId) {
		AiKapQAExample example = new AiKapQAExample();
		Criteria cri = example.createCriteria();
		List<Integer> list = queryTypeList(puserId);
		if(null==list||list.isEmpty()){
			return null;
		}else{
			cri.andStatusEqualTo(1).andTypeIn(list);
		}
		if(null!=tags&&tags.size()>0){
			for(int i=0;i<tags.size();i++){
				if(i==0){
					cri.andIssueLike("%"+tags.get(0)+"%");//必须有第一个
				}else{
					Criteria tempcri =	example.createCriteria();
					tempcri.andIssueLike("%"+tags.get(i)+"%");
					example.or(tempcri);
				}
			}
		}
		Map<Integer,Integer> tmpMap = new HashMap<>();
		List<AiKapQA> reList = aiKapQAMapper.selectByExample(example);
		for(int i=0;i<reList.size();i++){
			AiKapQA aiKapQA = reList.get(i);
			int sum = 0;
			for(int j=0;j<tags.size();j++){
				String tag = tags.get(j);
				if(aiKapQA.getIssue().contains(tag)){
					sum++;
				}
			}
			tmpMap.put(i,sum);
		}
		
		List<AiKapQA> returnList = new ArrayList<>();
		Map<Integer, Integer> temMaps = sortMapByValue(tmpMap);
		int i = 1;
		for (Integer key : temMaps.keySet()) { 
		  returnList.add(reList.get(key));
		  i++;
		  if(i >= 6){
			  break;
		  }
		}
		return returnList;
	}
	 /**
     * 使用 Map按value进行排序
     * @param map
     * @return
     */
    public static Map<Integer, Integer> sortMapByValue(Map<Integer, Integer> oriMap) {
        if (oriMap == null || oriMap.isEmpty()) {
            return null;
        }
        Map<Integer, Integer> sortedMap = new LinkedHashMap<Integer, Integer>();
        List<Map.Entry<Integer, Integer>> entryList = new ArrayList<Map.Entry<Integer, Integer>>(oriMap.entrySet());
        Collections.sort(entryList, new MapValueComparator());

        Iterator<Map.Entry<Integer, Integer>> iter = entryList.iterator();
        Map.Entry<Integer, Integer> tmpEntry = null;
        while (iter.hasNext()) {
            tmpEntry = iter.next();
            sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());
        }
        return sortedMap;
    }
    /**
     * 使用 比较器
     * @param map
     * @return
     */
   static class MapValueComparator implements Comparator<Map.Entry<Integer, Integer>> {

        @Override
        public int compare(Entry<Integer, Integer> me1, Entry<Integer, Integer> me2) {

            return me2.getValue().compareTo(me1.getValue());
        }
    }

猜你喜欢

转载自blog.csdn.net/rentian1/article/details/81109437