【发布时间】:2019-05-17 14:11:12
【问题描述】:
我需要打印ArrayList 的每个元素。这个ArrayList 可以是ArrayList 或String 类型。此列表的其他子级也可以是列表类型。
这是我写到现在的:
public class Logic extends AppCompatActivity {
ArrayList<Object> parent = new ArrayList<>();
ArrayList<Object> check = new ArrayList<>();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
parent.add("list 1");
check.add("list 2");
check.add(parent);
parent.add(check);
for (int i = 0; i < parent.size(); i++) {
if (!(parent.get(i) instanceof ArrayList)) {
Log.e("test",(String) parent.get(i));
} else {
printDetails((ArrayList<?>) parent.get(i));
}
}
}
public synchronized void printDetails(ArrayList<?> child) {
for (int i = 0; i < child.size(); i++) {
if (!(child.get(i) instanceof ArrayList)) {
Log.e("test1", (String) child.get(i));
} else {
printDetails((ArrayList<?>) child.get(i));
}
}
}
}
但这会打印所有突然的值,没有任何预期的顺序。期望是所有值都应该连续打印。就像如果列表的第一个元素是字符串,它应该首先打印字符串,否则如果它是一个列表,如果应该打印这个子列表的所有值,如果子列表的任何元素再次是列表,它也应该打印这些值并移动返回父列表的下一个元素。
如果这是输入:
ArrayList<Object> parent = new ArrayList<>();
ArrayList<Object> child1 = new ArrayList<>();
ArrayList<Object> subChild1= new ArrayList<>();
ArrayList<Object> nestedSubChild1= new ArrayList<>();
parent.add("list 1");
parent.add("list 1-2");
child1.add("childlist 2");
subChild1.add("sublist 1-1");
subChild1.add("sublist 1-2");
nestedSubChild1.add("nestedlist 1-1");
nestedSubChild1.add("nestedlist 1-2");
subChild1.add(nestedSubChild1);
child1.add(subChild1);
parent.add(child1);
我想要这个输出
list 1 list 1-2 childlist 2 sublist 1-1 sublist 1-2 nestedlist 1-1 nestedlist 1-2
另一个要求是使用递归,以便代码高效。
【问题讨论】:
-
你有
check.add(parent),然后是parent.add(check)。这会创建循环引用。这是故意的吗? -
@PrasadKarunagoda 这仅用于测试目的。这不会实时发生。
标签: java android arraylist logic