合并从缓存返回的List,引发缓存变空。
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当缓存。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你是去重那儿删掉了。第一次进去,系统强制的推荐的服务和缓存中的没有重复的;第二次进去,userSubscribeList不变,但是sysTjList中包含了userSubscribeList中的数据,去重后,就把缓存中的数据删掉了;第三再进去,缓存肯定就没数据了