java - 有没有办法从 ArrayList 中挑选出特定元素?

标签 java arraylist io

我正在尝试从三个单独的文件读取输入,并且用户指定要读取的文件。每个文件中的每一行都包含有关温度读数的信息:纬度、经度、年份、月份、最高温度、最低温度和平均温度。所以每一行看起来像这样:

39.95 41.1667 2002 04 -9999 -9999 420

每个温度还将除以 10 以获得实际温度(以摄氏度为单位)。如果温度为-9999,则不会读取。此外,每个项目都添加到我拥有的 ArrayList 中:

ArrayList<TempRead> t = new ArrayList();

我还有一个 TempRead 类,如下所示:

public class TempRead {
private double latitude = -100;
private double longitude = -180;
private int year = 0;
private int month = 0;
private double maxTemp = -9999;
private double minTemp = -9999;
private double avgTemp = -9999;

public TempRead(){}

public TempRead(double latitude, double longitude, int year, int month, double maxTemp, double minTemp, double avgTemp){
    this.latitude = latitude;
    this.longitude = longitude;
    this.month = month;
    this.year = year;
    this.maxTemp = maxTemp;
    this.minTemp = minTemp;
    this.avgTemp = avgTemp;
}

public double getLatitude(){
    return latitude;
}

public double getLongitude(){
    return longitude;
}

public int getMonth(){
    return month;

}

public int getYear(){
    return year;
}

public double getMaxTemp(){
    return maxTemp;
}

public double getMinTemp(){
    return minTemp;
}

public double avgTemp(){
    return avgTemp;
}

@Override
public String toString(){
    return latitude + " " + longitude + " " + year + " " + month + " " + maxTemp + " " + minTemp + " " + avgTemp + " ";
}

我现在遇到的问题是我不太确定如何获取 ArrayList 的温度元素。我做过这样的事情:

System.out.println(t.get(0));

它表明每一行实际上都被添加到 ArrayList 中,因为它打印出了文件中的第一行。但我必须计算平均值、最大值和最小值。有没有一种方法可以专门挑选出 ArrayList 的最后三个值,以便我可以进行这些计算?

编辑:这是我的主要内容:

public static void main(String[] args) {
    ArrayList<TempRead> t = new ArrayList();
    readFile(t);
    avgAllTemps(t);
}

public static void readFile(ArrayList<TempRead>t){
        try{
        String userFileName;
        Scanner in = new Scanner(System.in);
        System.out.println("Enter name of file: ");
        userFileName = in.next();
        System.out.println();

        Scanner file = new Scanner(new File(userFileName));

        while(file.hasNext()){
            t.add(new TempRead(file.nextDouble(), file.nextDouble(), file.nextInt(), file.nextInt(), file.nextDouble(), file.nextDouble(), file.nextDouble()));
        }
    }catch(IOException e){
        System.out.println(e);
    }
}

public static void avgTemps(ArrayList<TempRead>t){
    double totalMinTemp = 0.0;
    int count = 0;
    for (TempRead entry : t) {
        if (entry.getMinTemp() != -9999) {
            totalMinTemp += entry.getMinTemp();
            count++;
        }
        double avgMinTemp = totalMinTemp / count;
        System.out.println("Avg of min temps in arraylist: " + avgMinTemp);
    }
}

最佳答案

查找温度时,不应查找 ArrayList 的最后 3 个元素,而应查找 ArrayList 中每个元素内部的数据

要获取第一个条目的温度:

TempRead entry = t.get(0);
double maxTemp = entry.getMaxTemp();
double minTemp = entry.getMinTemp();
double avgTemp = entry.avgTemp();
//do stuff

如果您需要每个条目,请使用循环:

for(TempRead entry : t)
{
    double maxTemp = entry.getMaxTemp();
    double minTemp = entry.getMinTemp();
    double avgTemp = entry.avgTemp();
    //do stuff
}
<小时/>

执行诸如平均所有 minTemp 值之类的任务

double totalMinTemp = 0.0;
int count = 0;
for(TempRead entry : t)
    if(entry.getMinTemp() != -9999)
    {
        avgMinTemp += entry.getMinTemp();
        count++;
    }
double avgMinTemp = totalMinTemp / count;

或者使用流(感谢@JeroenSteenbeeke)

double avgMinTemp = t.stream().filter(t -> t.getMinTemp() != -9999).collect(Collectors.averaging(TempRead::getMaxTemp‌​));

关于java - 有没有办法从 ArrayList 中挑选出特定元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47514862/

相关文章:

java - NoClassDefFoundError : scala/ScalaObject in mixed Scala/Java project

java - Tomcat 和 Servlet 问题

python - 检查列表中的相等值并将它们设置为 0

c# - 使用 C# 读取 PuTTY 输出

c - 如何避免读取基准中的缓存效应

java - 从文件读取,内存不足

java - 如何确定条件变量上等待时间最长的线程?

java - CheckBoxPreference - onSharedPreferenceChanged 方法未被调用

java - 如何对 MultiValuedMap 中包含的 Double ArrayList 进行排序

java - Java中.add()返回一个 boolean 值,如何以列表形式返回