yedefaxing2010 2011-08-14 14:55
浏览 239
已采纳

数据过滤问题

小弟现在遇到一个条件过滤问题。请前辈指导
通过前台传过来的参数(Map类型)。比如A=1,B=2,C=3,D=4。然后通过这些参数来过滤后台查询出来的数据。
为了达到通用的效果。所以我用String数组来保存这些参数的key,然后过滤。但是现在写的这个样子只能判断一个条件,只要一个条件符合就会将map添加到List中。不能四个条件同时判断都成立后才将map添加到List。请前辈指导怎么样能让这个方法变成通用。不管我传几个参数。都判断非空后将这些参数当做条件来过滤数据。代码如下:
[code="java"]
String str[]={ "A", "B", "C", "D" };
//过滤缓存数据 str为String数组,CacheKey为缓存key,params为前台传来的map
List> datas = CacheDataFilter.cacheDataFilter(str,"cacheKey",params);
[/code]
[code="java"]
/**
* 过滤缓存数据
*
* @param str
* 要过滤的数组
* @param cacheKey
* 缓存key
* @param params
* 前台传来的map 将要过滤的key存入String数组。先判断是否存在然后循环和缓存数据中的key比较
* @return
*/
public static List> cacheDataFilter(String[] str,
String cacheKey, Map params) {
// 返回的map集合
List> mapList = new ArrayList>();
// 获得缓存中存放的数据
List> datas= (List>) CacheForData
.getCacheData().getData(cacheKey, null);
//如果查询数据为空,直接返回
if(datas==null)
{
return datas;
}
// 循环过滤
for (Map map : datas) {
boolean flag = true;
//循环String数组中的参数
for (String s : str) {
//判断客户端传入参数和缓存取出来的数据是否为空
if (flag && params.get(s) != null && map.get(s)!=null) {
//判断客户端传入参数和缓存取出来value是否一样,不一样赋false跳出
if (!((String) map.get(s)).contains((String) params.get(s))) {
flag = false;
break;
}
}
//flag==true则将map添加到list
if (flag) {
mapList.add(map);
}
}
}
return mapList;
}
[/code]

  • 写回答

1条回答 默认 最新

  • wks1986 2011-08-14 15:22
    关注

    [code="java"] for (Map map : datas) {

    boolean flag = true;

    //循环String数组中的参数

    for (String s : str) {

    //判断客户端传入参数和缓存取出来的数据是否为空

    if (flag && params.get(s) != null && map.get(s)!=null) {

    //判断客户端传入参数和缓存取出来value是否一样,不一样赋false跳出

    if (!((String) map.get(s)).contains((String) params.get(s))) {

    flag = false;

    break;

    }

    }

    • //flag==true则将map添加到list
    • if (flag) {
    • mapList.add(map);
    • }
      }
    • if (flag) {
    • mapList.add(map);
    •       }  
      
      }  [/code]
      
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置