在该类中迭代ArrayList <class>

时间:2016-08-24 17:17:59

标签: java arraylist iteration

我想迭代主要arraylist中的所有项目。

输出到目前为止我走了..你可以看到它没有显示a3,a3_1和a3_2

提前致谢!

这是我的代码:

addModel将Model添加到该对象内的Araylist中。它是Model类的一种方法。

MODEL

public class Model {
    String name;
    String surname;
    ArrayList<Model> arr = new ArrayList<Model>();

....//Constructor, getters,setters, toString\\

}

主要

public class Test{
    public static void main(String[] args) {
        ArrayList<Model> list = new ArrayList<Model>();

        Model a= new Model("1", "1");
        list.add(a);

        Model a2 = new Model("2", "2");
        list.add(a2);

        Model a2_1 = new Model("2_1", "2_1");
        a2.addModel(a2_1);

        Model a2_2 = new Model("2_2", "2_2");
        a2.addModel(a2_2);

        Model a2_3 = new Model("2_3", "2_3");
        a2.addModel(a2_3);

        Model a3 = new Model("3", "3");
        list.add(a3);

        Model a3_1 = new Model("3_1", "3_1");
        a3.addModel(a3_1);

        Model a3_2 = new Model("3_2", "3_2");
        a3.addModel(a3_2);


        iterate(list,0,true);
        System.out.println("\nEnd");
    }

    public static int iterate(ArrayList<Model> m, int i, boolean isNew){
        System.out.println(m.get(i).toString());

            if(!m.get(i).getArr().isEmpty()){
                Model mx = m.get(i);
                ArrayList<Model> nextArray=mx.getArr();
                if(isNew)
                    return iterate(nextArray, 0,true);
                else
                    return iterate(nextArray, i,false);
            }
            else{
                return iterate(m, i+1,true);
            }
    }
}

输出

{   name: 1 surname: 1}

{   name: 2 surname: 2}
Exception in thread "main"  
{   name: 2_1   surname: 2_1}

{   name: 2_2   surname: 2_2}

{   name: 2_3   surname: 2_3}
java.lang.IndexOutOfBoundsException: Index: 3, Size: 3

2 个答案:

答案 0 :(得分:0)

您的iterate函数可以在java8中使用

替换
list.stream().map(Model::getArr).flatMap(List::stream).forEach(System.out::println);

我也看不到变量isNew将如何变错。

答案 1 :(得分:0)

另一个选择

public static void iterate(ArrayList<Model> modelList) {

    if (modelList == null) return;

    for (Model model : modelList) {
        System.out.println(model.toString());
        iterate(model.getArr());
    }
}