合并从缓存返回的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当缓存。

评论区

JFinal

2018-08-24 11:20

userSubscribeList.removeAll(sameList); 这行代码注意一下

i++

2018-08-24 12:59

@JFinal 用合并方法2时也有userSubscribeList.removeAll(sameList); 这行代码。但是没有问题。sameList是从userSubscribeList得来的,所以可以remove。没有什么问题。

JFinal

2018-08-24 14:06

@i++ 单步调试解决一下,或许是 j2cache 的 bug

热门反馈

扫码入社