【问题标题】:How do I access a specific element from a nested ArrayList如何从嵌套的 ArrayList 访问特定元素
【发布时间】:2020-07-15 15:40:43
【问题描述】:

我有两个数组列表

private ArrayList<ArrayList<String> dataList = new ArrayList<>();
//This is a class variable

ArrayList<String> dataRow = new ArrayList<>();
//This is a method variable

我将项目添加到 dataRow

dataRow.add("number");
dataRow.add("firstName");
dataRow.add("surname");
dataRow.add("dateStart");
dataRow.add("dateEnd");

然后我将每个 dataRow 添加到 dataList 中,得到一个 ArrayList 的 ArrayList

dataList.add(dataRow);

我的问题是:

我只需要从每个 dataRow 中选择元素 3 和 4,但我找不到任何有效的代码。

我试过了

for (ArrayList<String> eachRow : dataList)
{
    For (String eachElement : eachRow)
    (
        System.out.println(eachElement)
    }
}

所有这些都是打印出所有元素

我也尝试过其他代码,例如

dataList.get(eachElement)

这会在 netbeans 中引发没有合适的方法错误

【问题讨论】:

  • 这应该可以for (List&lt;String&gt; row : dataList) System.out.println(row.get(3) + ": " + row.get(4));

标签: java arraylist java-8 nested netbeans-8.2


【解决方案1】:

我一发布就解决了。

内部for循环中的代码应该是:

System.out.println(eachRow.get(4));

【讨论】:

    【解决方案2】:

    假设您只想提取两个数组元素,您可以使用简单的 POJO:

    class YourPojo { // rename it to something self-explanatory
      private String field3;
      private String field4;   
      // getters & setters
    }
    

    然后定义一个实用方法,将数据从原始数组中提取到您的 POJO 中:

    static YourPojo extractYourPojo(List<String> rawData){
        YourPojo pojo = new YourPojo();
        pojo.setField3(rawData.get(3));
        pojo.setField4(rawData.get(4));
        return pojo;
    } 
    

    那么你可以使用如下方法:

    List<YourPojo> extracted = 
        dataList.stream()
                .map(ClassWithUtilityMethod::extractYourPojo)
                .collect(toList());
    

    【讨论】:

      【解决方案3】:

      你可以有一个类来存储如下值,

      class ExtractedValue {
      
        private String value3;
        private String value4;
      
        public ExtractedValue(String value3, String value4) {
          this.value3 = value3;
          this.value4 = value4;
        }
      
        public String getValue3() {
          return value3;
        }
      
        public String getValue4() {
          return value4;
        }
      }
      

      并使用下面的方法来提取第 3 和第 4 个值,

      List<ExtractedValue> extracted= dataList.stream().map(l -> new ExtractedValue(l.get(3), l.get(4)))
                  .collect(Collectors.toList());
      

      要打印,您可以使用以下内容,

      extracted.stream().forEach(e -> {
              System.out.println(e.getValue3());
              System.out.println(e.getValue4());
          });
      

      【讨论】:

        猜你喜欢
        • 2015-06-07
        • 2018-05-18
        • 1970-01-01
        • 1970-01-01
        • 2021-07-09
        • 2014-03-10
        • 1970-01-01
        • 2013-08-09
        • 1970-01-01
        相关资源
        最近更新 更多