如何为ArrayList中的相应数据赋值

时间:2015-08-24 02:21:16

标签: java arraylist iteration

enter image description here我有2个ArrayLists。第一个包含993个浮点值。我已将这993个浮点值的每12个实例添加到一起,并将它们存储在另一个ArrayList(993/12)中,使第二个ArrayList的大小为83.

以下是第二个ArrayList的片段:

919.2, 927.9, 809.39996, 633.8, 626.8, 871.30005, 774.30005, 898.8, 789.6, 936.3, 765.4, 882.1, 681.1, 661.3, 847.9, 683.9, 985.7, 771.1, 736.6, 713.2001, 774.49994, ...

这些值中的第一个,即919.2对应于1930年。

第二个,927.9对应于1931年。

第三个,809.39996对应于1932年,依此类推......意味着最后的第83个值将对应于2012年。

我的最终目标是在第二个ArrayList中查看这些值并查找最大值,打印其值以及与之对应的年份。 问题是该计划目前无法了解这些相应的年份值。

允许假设:第一个相应的年份值是1930年。

目前我能够成功打印ArrayList中最大的值,这是问题的一半。 要实现这一点,只需对ArrayList进行排序: System.out.println(depthAdd.get(depthAdd.size() -1));

我缺少的是相应的一年。我怎么能这样做?

以下是一些代码:

  public void depthValues() {
    ArrayList<Float> rValue = new ArrayList<>();
    ...
    ArrayList<Float> depthAdd = new ArrayList<>();
    Iterator<Float> it = rValue.iterator();
    final int MAX = 12;

    while(it.hasNext()) {
        float sum = 0f;
        int counter = 1;
        while (counter <= MAX && it.hasNext()) {
          sum += it.next();
          counter++;
        }
        depthAdd.add(sum);
    }


    Collections.sort(depthAdd);
    System.out.println("Wettest year: //year needs to go here "
    + depthAdd.get(depthAdd.size() -1));




    return;

  }

4 个答案:

答案 0 :(得分:3)

您可以复制原始List(排序前)。然后再次迭代以确定匹配位置。另一种选择是创建一个自定义类来包含年份和值,并在降雨量上创建自定义Comparator。第一个可能像

一样实现
List<Float> depthCopy = new ArrayList<>(depthAdd);
Collections.sort(depthAdd);
Float max = depthAdd.get(depthAdd.size() - 1);
for (int i = 0; i < depthCopy.size(); i++) {
    if (depthCopy.get(i).equals(max)) {
        System.out.println("Wettest year: " + (1930 + i) + " "
                + depthAdd.get(depthAdd.size() - 1));

    }
}

答案 1 :(得分:0)

只需跟踪单独变量中的索引和最大值:

float maxValue;
int maxIndex;
while (it.hasNext()) {
    float sum = 0f;
    int counter = 1;
    while (counter <= MAX && it.hasNext()) {
      sum += it.next();
      counter++;
    }
    if (sum > maxValue) {
       maxValue = sum;
       maxIndex = depthAdd.size(); // The current index
    }
    depthAdd.add(sum);
}

然后打印值:

System.out.println("The max was " + maxValue + " in " + (1930 + maxIndex));

答案 2 :(得分:0)

如果您需要/想要存储值对,可以使用Map<Integer, Float>之类的内容,并在排序后直接引用键值对。否则,之前的任何一个答案都应该有效。

答案 3 :(得分:0)

Float max =   depthAdd.get(0);
int index = 0;
for (int i = 1; I < r.size(); i++) 
   if (depthAdd.get(i) > max) {
      max = depthAdd.get(i);
      index = i;
   }

int year = 1930 + index;

max将是最大值;