public static List<Record> getUserSubscribe(String dsname, Map<String, Object> paraMap, boolean cacheable, String clearCachePWD) { //获取用户订阅的服务。数据库中用户订阅的服务是有数据的,所以不应该打印111的。 List<Record> userSubscribeList = DbUtil.filterFind(dsname, 110, 0, 30, cacheable, paraMap, clearCachePWD); if(userSubscribeList.isEmpty()){//用户订阅为空,返回默认服务 System.out.println("111"); //获取默认服务默 return DbUtil.filterFind(dsname, 111, 0, 11, cacheable, paraMap, clearCachePWD); } else {//用户订阅不为空时,合并系统强制推荐的服务。 System.out.println("222"); // //获取系统强制推荐的服务 List<Record> sysTjList = DbUtil.filterFind(dsname, 158, 0, 8, cacheable, paraMap, clearCachePWD); //找出相同的服务 List<Record> sameList = new ArrayList<Record>(); //这里省略找出相同服务代码 //去重 userSubscribeList.removeAll(sameList); //合并方法1:直接把去重后的用户订阅合并到系统强制推荐的服务里。 //使用这个方法合并。就会有问题:运行前两次是正常的,都不会打印111。但第三次就会打印111了。 sysTjList.addAll(userSubscribeList); return sysTjList; //合并方法2:没有问题 // List<Record> allList = new ArrayList<Record>(); // allList.addAll(sysTjList); // allList.addAll(userSubscribeList); // return allList; }
以上代码逻辑简单说明:
就是把从缓存里取出来的两个list对像,使用addAll合并时,调用两次后,第三次结果就变空集合了。
使用第二种方法合并就不会有问题。
实在找不出问题存在,有人知道的不。。
使用的是j2cache当缓存。
项目:JFinal