现在有100个元素,我要定义100个flag并做100if次判断,请问这代码该如何优化?

新手上路,请多包涵

虚心求教!

public static void main(String[] args) {
        List<String> listFirst = new ArrayList<>();
        listFirst.add("parent1");
        listFirst.add("parent2");
        listFirst.add("parent3");
        //第二层for和第三层for的元素相同,个数不固定,假如有100个元素就要100个if判断和100个flag
        List<String> listSecond = new ArrayList<>();
        listSecond.add("filedName1");
        listSecond.add("filedName2");
        List<String> listChildren = new ArrayList<>();
        listChildren.add("filedName1");
        listChildren.add("filedName2");
        boolean flag1 = true;
        boolean flag2 = true;
        boolean flag3 = true;
        for (String str : listFirst) {
            for (int i = 0; i < listSecond.size(); i++) {
                for (String listChild : listChildren) {
                    if (listChild.equals(listSecond.get(i)) && flag1){
                        System.out.println("parent1:" + listFirst.get(0));
                        flag1 = false;
                        break;
                    }
                    if (listChild.equals(listSecond.get(i)) && flag2){
                        System.out.println("parent2:" + listFirst.get(1));
                        flag2 = false;
                        break;
                    }
                    if (listChild.equals(listSecond.get(i)) && flag3){
                        System.out.println("parent3:" + listFirst.get(2));
                        flag3 = false;
                        break;
                    }
                }
            }
        }
    }

执行结果如下:

parent1:parent1
parent2:parent2
parent3:parent3

这段代码该如何优化?

阅读 1.9k
2 个回答

你可能需要一个 List<Boolean>

我没看懂你的代码要干嘛。但是从输入和输出的角度看,如果flag个数等于listFirst中元素个数,你的代码可以表述为:如果listSecond和listChildren中只要至少存在一组相同字符串,且不论相同几组,输出结果都必然是:

parent1:listFirst.get(0)
parent2:listFirst.get(1)
parent3:listFirst.get(2)
...
...
...
parentN:listFirst.get(listFirst.size()-1)

如果没有相同字符串,则啥也不输出。

这么理解的话,只要判断一次是否有存在相同字符串就好了,

    public static void main(String[] args) {
        List<String> listFirst = new ArrayList<>();
        listFirst.add("parent1");
        listFirst.add("parent2");
        listFirst.add("parent3");
        listFirst.add("parent4");
        //第二层for和第三层for的元素相同,个数不固定,假如有100个元素就要100个if判断和100个flag
        List<String> listSecond = new ArrayList<>();
        listSecond.add("filedName1");
        listSecond.add("filedName2");
        List<String> listChildren = new ArrayList<>();
        listChildren.add("filedName1");
        listChildren.add("filedName2");
        if (listSecond.containsAll(listChildren)){
            for(int i = 0; i < listFirst.size(); i++) {
                System.out.println("parent:"+ (i+1) +":"+ listFirst.get(i));
            }
        }

    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题