如何从多维ArrayList中检索元素

时间:2016-04-21 10:08:07

标签: java arraylist

我将以下内容作为名为AcidExp

的多维arrayList的一部分
[[[Acid Exposure (pH),  Total], [,  Total Normal], [Clearance pH  :  Channel 7], [Number of Acid Episodes,  22], [Time,  20.6 min], [Percent Time,  2.7%], [Mean Acid Clearance Time,  56 sec], [Longest Episode,  2.7 min], [Gastric pH  :  Channel 8], [Time pH<4.0,  713.8 min], [Percent Time,  93.3%]]]

[[[Reflux Study Summary], [Acid Exposure (pH),  Upright, Recumbent, Total], [,  Upright Normal Recumbent Normal Total], [Normal], [# of Episodes Channel 7,  24, 0, 24], [Percent Time Clearance pH,  3.2%,  (< 6.3),  0.0%,  (< 1.2),  1.8%,  (< 4.2)]]]

[[[blabla], [jonny,  billy, judy, tim], [pH,  3.2%,  0.0%,  1.8%]]]

我似乎无法单独引用每个ArrayLists,因此我可以单独操作它们。

这是我的代码:

ArrayList<ArrayList> AcidExp = new ArrayList<ArrayList>();
     Pattern tu1 = Pattern.compile("Acid Exposure \\(pH\\)");
     Pattern tu2 = Pattern.compile("Upright");
     for (List<String> row : twoDim) {
         boolean found = false;

             if (tu1.matcher(row.get(0).toString()).matches()) {
                 found = true;
              break;
             }
         if (found) {
             AcidExp.add((ArrayList<List<String>>) twoDim);
             System.out.println(AcidExp.get(0));
         }
     }

但这只是给了我原来的外支架被删除。

[[Acid Exposure (pH),  Total], [,  Total Normal], [Clearance pH  :  Channel 7], [Number of Acid Episodes,  22], [Time,  20.6 min], [Percent Time,  2.7%], [Mean Acid Clearance Time,  56 sec], [Longest Episode,  2.7 min], [Gastric pH  :  Channel 8], [Time pH<4.0,  713.8 min], [Percent Time,  93.3%]]

    [[Reflux Study Summary], [Acid Exposure (pH),  Upright, Recumbent, Total], [,  Upright Normal Recumbent Normal Total], [Normal], [# of Episodes Channel 7,  24, 0, 24], [Percent Time Clearance pH,  3.2%,  (< 6.3),  0.0%,  (< 1.2),  1.8%,  (< 4.2)]]

    [[blabla], [jonny,  billy, judy, tim], [pH,  3.2%,  0.0%,  1.8%]]

我怎样才能单独引用ArrayList中的每个List?

目前如果我这样做

`AcidExp.get(0).get(1)` I just get 

[Acid Exposure (pH),  Total]
[Reflux Study Summary]
[blabla]

如果我这样做

AcidExp.get(1)

我得到了

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1

我认为这与我想要的所有ArrayLists都存储在AcidExp的第一个元素中的事实有关,我猜想但是我认为我的所有ArrayLists都混淆了

2 个答案:

答案 0 :(得分:0)

我并不完全知道问题是什么,但是在#define EXAMPLE(IDN) Example IDN{ #IDN } EXAMPLE(object); - 句子的正文中你添加了一个if - 语句,所以循环就在那里结束了。 break - 部分位于循环内,因此永远不会执行 - 只要if(found)设置为found,您就会离开循环。也许这就是问题?

答案 1 :(得分:0)

好的,我想我已经想出了你想要实现的目标。你基本上试图找到具有“酸暴露(ph)”作为其元素之一的集合。错误基本上是你只有一个循环迭代数据集,你需要两个。

然后,您可以遍历所有集合,然后遍历每个集合中的所有元素。然后,一旦匹配完成,你就可以突破内循环但仍然继续查看其余的集合。

见下面的代码:

ReplaceWhat,ReplaceTo
192.168.1.1,server1
192.168.1.20,SERVER2

输出:

public static void main (String[] args) throws java.lang.Exception
{
    List<List<String>> set1 = new ArrayList() {{
        add(Arrays.asList("Acid Exposure (pH)", "Total"));
        add(Arrays.asList("", "Total Normal"));
        add(Arrays.asList("AClearance pH  :  Channel 7"));
        add(Arrays.asList("Number of Acid Episodes",  "22"));
    }};

    List<List<String>> set2 = new  ArrayList() {{
        add(Arrays.asList("Reflux Study Summary"));
        add(Arrays.asList("Acid Exposure (pH)", "Upright", "Recumbent", "Total"));
    }};

    List<List<String>> set3 = new  ArrayList() {{
        add(Arrays.asList("blabla"));
        add(Arrays.asList("jonny", "billy", "judy", "tim"));
    }};

    List<List<List<String>>> twoDim = new ArrayList() {{
        add(set1);
        add(set2);
        add(set3);
    }};

    ArrayList<List<List<String>>> acidExp = new ArrayList<>();
    Pattern tu1 = Pattern.compile("Acid Exposure \\(pH\\)");
    for (List<List<String>> row : twoDim) {
        for(List<String> element : row) {
            String val = element.get(0);
            if (tu1.matcher(val).matches()) {
                acidExp.add(row);
                break;
            }
        }
    }

    System.out.println(acidExp);
}

acidExp变量现在只包含第一组(注意你实际上不需要布尔标志)。