查看网站cms,免费的外网连接器,互联网络,网络维护工作怎么样背景: 一般文件报表经常会需要搜各个表头对应内容#xff0c;如果支持全部类型切换搜索#xff0c;操作起来就不够便捷。而且这个报表是测试自己用的#xff0c;准确性可以不用太要求#xff0c;所以更想要那中输入关键字命中任意表记录内容的模糊匹配功能。
方法一:解析搜…背景: 一般文件报表经常会需要搜各个表头对应内容如果支持全部类型切换搜索操作起来就不够便捷。而且这个报表是测试自己用的准确性可以不用太要求所以更想要那中输入关键字命中任意表记录内容的模糊匹配功能。
方法一:解析搜索类型和关键字,加入到查询条件。 方法二:遍历搜索结果解析成json或key-value逐一匹配符合则加入搜索结果。 方法三:通过stream API直接过滤搜索结果符合的加入搜索结果。相当于搜索结果全文匹配。
方法一如果报表查表很单一的话就非常适用但如果是不同条件查不同表组合那就会非常麻烦而且查询条件也需要各种拼奏。 后两者显然方法三更便捷。
具体实现:
public JSONObject getReportList(String env, MapString, Object request){string[]keyWords request. containskey(keyword) ? request.get(keyWord). tostring().split( ) : null; // 支持空格符分隔关键字 ListMapstring,Object list 分页后表搜索结果ListMapString,Objectlistcount不分页下的搜索总数 if (keywords ! null keybords.length θ){int preCount request.containskey(count) ? Integer .parseInt(request.get(count).toString()) : 0;// ListMapString,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 (count2pageSize 8 currentPage * pageSize count){request.put(currentPage,currentPage 1);JSONObject addList getReportList(env,request); if (addlist ! nul1){list.addAll((Collection?extends MapString,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、多个关键字可能导致性能略低。 不过对于比如指定日期指定类目这样子的关键字已经足够精确和高效了。|