我有以下列表List <List <List <List <Object> >>> titles = new ArrayList <List <List <List <Object> >>> ();
,我想访问其中的元素,但我不知道该怎么做..
列表中有1个元素,依次包含3个元素,而这3个元素中的每个元素都包含6个元素,但是我不知道如何访问它们。
这是将arraylist放在列表视图中时的输出:
1 element---> [[[12,"01",1,"Fallo de corriente",0,1],
2 element---> [12,"01",2,"Nivel m\u00E1ximo (activaci\u00F3n)",0,0],
3 element---> [12,"01",3,"Nivel m\u00E1ximo(desactivaci\u00F3n)",0,1]]]
每个元素中都有6个元素,如何访问内部包含6个元素的元素1?
答案 0 :(得分:2)
如果您确实要使用这种结构,则可以使用类似这样的方法,例如提取第一项的标题。
String title1 = titles.get(0).get(0).get(0).get(3).toString();
因此,您有四个层次结构,titles
列表是第1层,get(0)
将采用它包含的列表,get(0)
将采用第2级(也是唯一的项目) get(0)
将首先获得3级的3个项目,最后get(3)
将获得4级的第四个元素,这是我所看到的实际标题。
因此您的title1
应该是"Fallo de corriente"
答案 1 :(得分:2)
您可能必须重新考虑如何获取数据。通过在另一个ArrayList()内的另一个ArrayList()内放置ArrayList()是一项累人的工作,其中的循环遍历整个列表。
程序员发现任何错误的噩梦。
但是,解决方案的总体思路是
遍历List<Object>()
for(Object o: objectList){}
遍历List<List<Object>>
for(List<Object> outerObjList: objectListList){
for(Object innerObject: outerObjList){
}
}
以此类推...对于任何优秀的开发人员而言,它的复杂性都变得过高。
我永远都不愿意为List <List <List <List <Object> >>> titles
编写循环!永远! (双关语!)。
如果没有其他选择(从其他来源获得它),我会写一个类来使用Jackson ObjectMapper执行映射。继续,您的代码可能更具可读性,如所述here
请阅读如何构造类以及降低循环嵌套的可能性。也许将数据重新组织为2-3个单独的 Map
?编码愉快!
答案 2 :(得分:2)
听起来好像列表列表中的存储是多余的,并且您只对内部列表的值感兴趣。如果是这样,则映射会帮助您进行进一步处理吗?
List <Object> result = titles.stream()
.flatMap(x -> x.stream())
.flatMap(y -> y.stream())
.collect(Collectors.toList());
System.out.println(result);
//[[12, 01, 1, Fallo de corriente, 0, 1], [12, 01, 2, Nivel máximo (activación), 0, 0], [12, 01, 3, Nivel máximo(desactivación), 0, 1]]
或再增加一个步骤以获取每个值的列表:
List <Object> result = titles.stream()
.flatMap(x -> x.stream())
.flatMap(y -> y.stream())
.flatMap(z -> z.stream())
.collect(Collectors.toList());
System.out.println(result);
//[12, 01, 1, Fallo de corriente, 0, 1, 12, 01, 2, Nivel máximo (activación), 0, 0, 12, 01, 3, Nivel máximo(desactivación), 0, 1]