祖传代码里的神逻辑 两个list嵌套去重求并集

昨天做权限限制的需求,给自己配置了两个新的分组,然后就发现登录不了项目了,sql报错ORA-01795: maximum number of expressions in a list is 1000,一路debugger找到了元凶,看逻辑是想把两个不同表里的分组去重然后合并到一起,从表面上看,代码没啥毛病,但是细看一下,就发现了问题。现在我通过简易代码还原一下:

public static void main(String[] args) {
        List<String> aList = new ArrayList<>();
        aList.add("a");
        aList.add("b");
        aList.add("c");
        aList.add("d");
        aList.add("e");
        aList.add("f");
        aList.add("h");
        aList.add("i");
        aList.add("j");        
        List<String> bList = new ArrayList<>();
        bList.add("k");
        bList.add("l");
        for (int i = 0; i < aList.size(); i++) {
            String a = aList.get(i);
            for (int j = 0; j < bList.size(); j++) {
                String b = bList.get(j);
                if (b.equals(a)){
                    continue;
                }else{
                    bList.add(a);
                }
            }
        }
        System.out.println(bList.size());
    }

有兴趣的小伙伴可以猜一下这个bList的size是多少。

然后向负责人提交截图,逻辑分析,结果负责人说修改这个风险有点高,你先设定其他分组试试,能继续目前的开发需求就行,否决了我修改这段代码的提议。

把代码修改成不就好了吗,又不破坏原有的逻辑,也能避免问题的出现:

 public static void main(String[] args) {
        List<String> aList = new ArrayList<>();
        aList.add("a");
        aList.add("b");
        aList.add("c");
        aList.add("d");
        aList.add("e");
        aList.add("f");
        aList.add("h");
        aList.add("i");
        aList.add("j");
        List<String> bList = new ArrayList<>();
        bList.add("k");
        bList.add("l");
        for (String a : aList) {
            if(!bList.contains(a)){
                bList.add(a);
            }
        }
        System.out.println(bList.size());
    }

这段代码是项目初始化时候就有的,满打满算有9年了,真真的祖传代码,负责人可能跟甲方沟通没问题,但是修改这个祖传的东西还是下不了手。

我就想问问,人制定的使用规范能胜过严谨的代码逻辑吗?你们在项目开发中有没有遇到相似的情况呢?

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值