从ArrayList访问索引值并将它们存储在单独的新ArrayList中

时间:2015-08-22 23:34:27

标签: java arraylist indexing iteration

diagram to help explain question

我目前有一个名为ArrayList的月份。

ArrayList<MonthData> months;

MonthData是一个基本上是数据模型的类。

public class MonthData {

  int y;
  int m;
  float h;
  ...


  public MonthData(String data) throws Exception {
    ...
    this.parseData(data);
  }


  void parseData(String csvData) {
    String[] parseResult = csvData.trim().split("\\s+");

    this.setYear(parseResult[0]);
    this.setMonth(parseResult[1]);
    ...


  public String toString() {
    return "y =" + year + ", m =" + month + ",...

  }


  public int getY() {
    return y;
  }

  // followed by lots of getters for: m, h, c, f, r, s, ... 

现在是第二个公共课......

public class Totals {
  private ArrayList<MonthData> months;


  public static void main(String args[]) throws IOException, Exception {
    Totals t = new Totals("..blah/../..blah/../Numbers.data");

  }

  public void readDataFile(String filename) throws IOException, Exception {
    FileReader file = new FileReader(filename);
    BufferedReader buffer = new BufferedReader(file);
    String line;

    buffer.readLine(); //skipping headers
    ...

    while (!(line = buffer.readLine()).isEmpty()) {
      this.months.add(new MonthData(line.trim()));
    }

    buffer.close();
    System.out.println(this.months);
  }

这个类读取包含大量数据的文件,这里是数据片段:

     y    m      h       c       f      r       s //here for your reference

   1930   1    8.1     2.4       6   120.5    54.2
   1930   2    4.4     0.6      12    22.2    29.1
   1930   3    8.1     2.1       9    76.2    88.2
    ...

当我System.out.println(this.months);

我明白了:

y=1930, m=1, h=8.1, c=2.4, f=6, r=120.5, s=54.2, y =1930, m=2, h=4.4, c=0.6, f=12, r=22.2, s=29.1, ...等。

正如您所看到的,它与数据文件相对应,因此我知道数据正在正确地读取到ArrayList months

********问题*********** 现在我要做的是查看这个ArrayList并获取每个r值并将它们存储在不同的ArrayList中,比如说ArrayList rValues(这样我的ArrayList只有r值)。

我知道我需要以某种方式迭代这个ArrayList到r值索引,获取值然后将它们存储在另一个ArrayList中,只是不知道如何!! :(

任何帮助都将非常感谢。很高兴回答任何问题,虽然我可能已经解释了最新情况。在此先感谢你们:)

1 个答案:

答案 0 :(得分:3)

为什么不迭代这样的列表:

for (int i = 0; i<months.size(); i++)

然后您可以使用此命令获取MonthData对象

months.get(i)

如果你只想要一个r值,那么为r(getR())创建getter并调用它并保存在新的数组列表中:

这样的事情:

ArrayList<Float> rValue = new ArrayList<>();
for (int i = 0; i<months.size(); i++)
{
    rValue.add(months.get(i).getR());
}

(感谢@Mick Mnemonic) 您也可以使用foreach循环

ArrayList<Float> rValue = new ArrayList<>();
for (MonthData m: months) 
{ 
    rValue.add(m.getR()); 
}