List <List <List <List <Object> >>>标题的访问元素= new ArrayList <List <List <List <Object> >>>();

时间:2019-09-09 12:19:11

标签: java android arraylist

我有以下列表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?

3 个答案:

答案 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]