Мне нужно создать массив размером 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);
}
}