Как удалить дубликаты в зависимости от параметра объекта в arrayList? - PullRequest
0 голосов
/ 24 апреля 2020

Мне нужно создать массив размером 10 объектов температуры, который go от наименьшего до наибольшего на основе параметра temp. Проблема в том, что страна может быть в списке только один раз. В настоящее время у меня есть общий список от самого маленького до самого большого. Поэтому мне нужно удалить любую страну, которая повторяется (до 10 уникальных стран). Это то, что у меня есть до сих пор

public ArrayList<ITemperature> allCountriesGetTop10LowestTemp(int month)
 // TASK B-1
 // 1. the return list is sorted from lowest to highest temperature
 {
     ArrayList<ITemperature> temp= readDataFromFile("");
     TreeSet<ITemperature> order= new TreeSet<ITemperature>();
     String actualMonth= monthConverter(month);
     ITemperature res= new Temperature(0,0, "You Entered","Something" ,"Wrong");
     for(ITemperature c: temp ) {
         if(c.getMonth().equals(actualMonth))
         {
             res= c;
             order.add(res);
         }
     }

     System.out.println(order);
     ArrayList<ITemperature> ordered2= new ArrayList<ITemperature>(order);

     writeSubjectHeaderInFile("taskB1_climate_info.csv", "gets lowest temperature reading of 10 countries in a specific month");
      writeDataToFile("taskB1_climate_info.csv","Temperature,Year,Month,Country,Country_Code",ordered2);
     return ordered2;


package climatechange;


public class Temperature implements ITemperature, Comparable<ITemperature>
{
    private String country;
    private String country3LetterCode;
    private String month;
    private int year;
    private double temperature;
    public Temperature(double temperature, int year, String month, String country, String country3LetterCode)
    {
        this.country=country;
        this.country3LetterCode=country3LetterCode;
        this.month=month;
        this.year=year;
        this.temperature=temperature;
    }


 public String getCountry() // get the name of the country
 {
     return country;
 }
 public String getCountry3LetterCode() // get the 3-letter code of the country
 {
     return country3LetterCode;
 }
 public String getMonth() // get the month
 {
     return month;
 }
 public int getYear() // get the year
 {
     return year;
 }
 public double getTemperature(boolean getFahrenheit) // get temperature; input parameter of false = return Celsius value)
 {
     if(getFahrenheit)
     {
         temperature= (temperature*9/5+32);
     }
     return temperature;
 }


@Override
public int compareTo(ITemperature newTemp) {
    // compares and returns the higher temp
    int status= 0;
    if(Math.round(this.temperature*100.0)/100.0 > (Math.round(newTemp.getTemperature(false)*100.0)/100.0))
            {
                status= 1;
            }
    else if(Math.round(this.temperature*100.0)/100.0 < (Math.round(newTemp.getTemperature(false)*100.0)/100.0))
    {
        status=-1;
    }
    else if (this.country.compareTo(newTemp.getCountry())== 1)
    {
        status=1;
    }
    else if (this.country.compareTo(newTemp.getCountry())== -1)
    {
        status=-1;
    }
    else if(this.year>(newTemp.getTemperature(false)))
    {
        status=1;
    }
    else if(this.year>(newTemp.getTemperature(false)))
    {
        status=-1;
    }

    return status;
}

@Override
public boolean equals(ITemperature m)
{
    if(m== this  )
    {
     return true;
    }
    if (m==null || (this.getClass() != m.getClass()))
    { 
        return false; 
    } 
    ITemperature n= (ITemperature) m;
    return (temperature==n.getTemperature(false));
}

@Override
public String toString() { 
    String temp= Double.toString(temperature);
    String rYear= Integer.toString(year);

    return String.format(temp+","+rYear+","+month+","+country+","+country3LetterCode); 
}

}

...