2016-04-29 109 views
0

每个值我有一个数组列表包含这样JAVA获取的ArrayList中

[[asd, asswwde, efef rgg], [asd2223, asswwd2323e, efef343 rgg]] 

两个列表 我的代码是

ArrayList<String> create = new ArrayList<String>(); 
ArrayList<String> inner = new ArrayList<String>(); 
ArrayList<String> inner1 = new ArrayList<String>(); 
inner.add("asd"); 
inner.add("asswwde"); 
inner.add("efef rgg"); 

inner1.add("asd2223"); 
inner1.add("asswwd2323e"); 
inner1.add("efef343 rgg"); 

create.add(inner.toString()); 
create.add(inner1.toString()); 

我已经通过的各项指标之一来获取所有值一个arraylist

那么什么是最好的方式来获得这些所有的价值一个接一个。 我在Eclipse Mars上使用JAVA。

+0

为了避免人们感到沮丧 - 你应该改述你的问题。你的问题实际上不是关于嵌套'ArrayList',而是如何解析java'String''“[asd2223,asswwd2323e,efef343 rgg]”'回单个元素(也是'String')。 – YoYo

回答

1

您可以通过外部ArrayList要循环,然后遍历这个ArrayList内的每个ArrayList,您可以通过这样做以下:

for (int i = 0; i < outerArrayList.size(); i++) 
{ 
    for (int j = 0; j < outerArrayList.get(i).size(); j++) 
    { 
     String element = outerArrayList.get(i).get(j); 
    } 
} 

这里是另一个verison您可能会发现更容易理解,但基本上是相同的:

for (int i = 0; i < outerArrayList.size(); i++) 
{ 
    ArrayList<String>() innerArrayList = outerArrayList.get(i) 

    for (int j = 0; j < innerArrayList.size(); j++) 
    { 
     String element = innerArrayList.get(j); 
    } 
} 

或可选地再次使用foreach循环:

for (ArrayList<String> innerArrayList : outerArrayList) 
{ 
    for (String element : innerArrayList) 
    { 
     String theElement = element; 
    } 
} 

值得注意的是你的ArrayList看起来包含不同类型的元素 - 这绝对是你想要做的吗?另外,确保你用“”包围你的字符串,除非它们是变量名 - 它不会出现。

编辑:根据您的更新更新元素类型字符串。

我也建议你改变的类型,你的创造ArrayList,像下面,因为你知道它会被存储ArrayList类型的多个元素:

ArrayList<ArrayList> create = new ArrayList<ArrayList>(); 
+0

前两个示例将跳过最后一个元素。 – Pete

+0

@PietervandenHam正确,谢谢你指出,有一个习惯坚持-1无处不在:p – James

+0

@詹姆斯我跟着你的第二个答案,这给了我错误。 – user3441151

3

只要使用两个嵌套的循环:

​​

您可能还想考虑用适当的对象替换内部列表。

+0

我只是用我的代码更新我的帖子 – user3441151

+1

@ user3441151为什么你将列表转换为字符串?这会让你的生活更加困难,当你想要提取值... – assylias

+0

由于要求,请根据我的要求更新您的代码。 – user3441151

1

尝试使用for循环嵌套在foreach循环是这样的:

for(List list : arrayListOfList) 
    { 
    for(int i= 0; i < list.size();i++){ 
     System.out.println(list.get(i)); 
    } 
    } 
+0

在你的代码中s.get(i)中的's'是什么。 – user3441151

0

我不知道如果数据结构需求的一部分,但它是若使用ArrayList的你外的ArrayList更好的构建作为通用类型。

ArrayList<ArrayList<String>> create = new ArrayList<ArrayList<String>>(); 
ArrayList<String> inner = new ArrayList<String>(); 
ArrayList<String> inner1 = new ArrayList<String>(); 

... 

create.add(inner); 
create.add(inner1); 

然后,你可以把它们打印出来是这样的:

for(List list : create) { 
    for (String val : list) { 
     System.out.println(val); 
    } 
} 

Othewise,如果你坚持你的原代码,当你添加到您所使用的toString()方法上的外部列表数组列表。这将产生由括号括起来的逗号分隔的值串(例如[val1,val2])。如果你想实际打印输出单独的数值去掉括号,等等,你必须将字符串转换回做这样一个数组(或列表):

for (String valList : create) { 
    String[] vals = valList.substring(1, val.length() - 1).split(","); 
    for (String val : vals) { 
     System.out.println(val.trim()); 
    } 
}