JAVA-报表模糊搜索询易实现

背景:
一般文件报表经常会需要搜各个表头对应内容,如果支持全部类型切换搜索,操作起来就不够便捷。而且这个报表是测试自己用的,准确性可以不用太要求,所以更想要那中输入关键字命中任意表记录内容的模糊匹配功能。

方法一:解析搜索类型和关键字,加入到查询条件。
方法二:遍历搜索结果,解析成json或key-value,逐一匹配,符合则加入搜索结果。
方法三:通过stream API直接过滤搜索结果,符合的加入搜索结果。相当于搜索结果全文匹配。

方法一如果报表查表很单一的话就非常适用,但如果是不同条件查不同表组合那就会非常麻烦,而且查询条件也需要各种拼奏。
后两者显然方法三更便捷。

具体实现:

public JSONObject getReportList(String env, Map<String, Object> request){
	string[]keyWords = request. containskey("keyword") ? request.get("keyWord"). tostring().split(" +") : null;   // 支持空格符分隔关键字 List<Map<string,Object>> list = 分页后表搜索结果
	List<Map<String,Object>>listcount=不分页下的搜索总数 
	if (keywords != null && keybords.length >θ){
		int preCount = request.containskey("count") ? Integer .parseInt(request.get("count").toString()) : 0;
		// List<Map<String,object>> list2 = null;
		for (String keyWord : keywords){
			System.out,print1n("keyWord = " + keyWord);
			list = 1ist.stream().fi1ter(s -> s.tostring().contains(keyword)) .collect(Collectors.toList()); 
		}
		System.out.println("list2 =- + list); 
		int count2 = list.size()+ preCount;
		System.out.println("count2=" + count2);//不足一页就补数
		if (count2<pageSize 8& currentPage * pageSize < count){
			request.put("currentPage",currentPage + 1);
			JSONObject addList = getReportList(env,request); 
			if (addlist != nul1){
			list.addAll((Collection<?extends Map<String,Object>>) addList.get("item"));
			}
			request.put("list",list); 
		}
		jsonObject.put("iten", 1ist); 
		jsonObject.put("total", count2);
		}else {
		jsonObject,put("iten",list); 
		jsonObject,put("total", count); 
	}
	return json0bject;
}

这种方法的小坑:
1、翻页会有问题。可能因为补数导致制页后的数据重复出现,但如果搜索结果少于一页就没有差别。
2、如果关键字不够明确会导致匹配到很多无效数据。如关键字关键字=1
3、多个关键字可能导致性能略低。
不过对于比如指定日期,指定类目这样子的关键字,已经足够精确和高效了。|

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值