fix(display): use array instead of hashmap

This commit is contained in:
Martin Eyben 2024-12-18 21:09:24 +01:00
parent 0f404622ed
commit 398e197aa4
2 changed files with 18 additions and 18 deletions

View File

@ -3,6 +3,7 @@ package eirb.pg203.weather.display;
import eirb.pg203.weather.exceptions.WeatherFetchingException;
import eirb.pg203.weather.data.WeatherData;
import eirb.pg203.weather.data.api.WeatherDataAPI;
import eirb.pg203.weather.utils.Pair;
import java.util.ArrayList;
import java.util.HashMap;
@ -43,10 +44,10 @@ public class WeatherDisplayBasic implements eirb.pg203.weather.display.WeatherDi
* @param weatherDataAPIArrayListHashMap list of Weather data for every WeatherDataApi
* @return day column size
*/
private double getColumnSize(HashMap<WeatherDataAPI, ArrayList<WeatherData>> weatherDataAPIArrayListHashMap) {
private double getColumnSize(ArrayList<Pair<WeatherDataAPI, ArrayList<WeatherData>>> weatherDataAPIArrayListHashMap) {
double max = 0;
for (WeatherDataAPI api: weatherDataAPIArrayListHashMap.keySet()) {
for (WeatherData w: weatherDataAPIArrayListHashMap.get(api)){
for (Pair<WeatherDataAPI, ArrayList<WeatherData>>api: weatherDataAPIArrayListHashMap) {
for (WeatherData w: api.getValue()){
// real str len with special chars
int strLen = w.toString().codePointCount(0, w.toString().length());
max = Math.max(max, strLen);
@ -124,7 +125,7 @@ public class WeatherDisplayBasic implements eirb.pg203.weather.display.WeatherDi
* @param weatherDataAPIArrayListHashMap Hashmap with WeatherData array for each api
* @param days number of days to display
*/
private void displayAllWeatherDatas(HashMap<WeatherDataAPI, ArrayList<WeatherData>> weatherDataAPIArrayListHashMap, int days) {
private void displayAllWeatherDatas(ArrayList<Pair<WeatherDataAPI, ArrayList<WeatherData>>> weatherDataAPIArrayListHashMap, int days) {
double dayColumnSize = this.getColumnSize(weatherDataAPIArrayListHashMap);
// Adjust column size
@ -140,18 +141,19 @@ public class WeatherDisplayBasic implements eirb.pg203.weather.display.WeatherDi
this.displaySeparatorLine(days, sourceColumnSize, dayColumnSizeSeparator);
// Apis
for (WeatherDataAPI api: weatherDataAPIArrayListHashMap.keySet()) {
displayWeatherDatas(api.getAPIName(), weatherDataAPIArrayListHashMap.get(api), startColumnString, sourceColumnSize, dayColumnSize);
for (Pair<WeatherDataAPI, ArrayList<WeatherData>> api: weatherDataAPIArrayListHashMap){
displayWeatherDatas(api.getKey().getAPIName(), api.getValue(), startColumnString, sourceColumnSize, dayColumnSize);
this.displaySeparatorLine(days, sourceColumnSize, dayColumnSizeSeparator);
}
}
public void display(int days, String city) {
HashMap<WeatherDataAPI, ArrayList<WeatherData>> weatherDatasMap = new HashMap<>();
ArrayList<Pair<WeatherDataAPI, ArrayList<WeatherData>>> weatherDatasMap= new ArrayList<>();
for (WeatherDataAPI w: apis) {
try {
weatherDatasMap.put(w, w.getTemperatures(days, city));
weatherDatasMap.add(new Pair<>(w, w.getTemperatures(days, city)));
} catch (WeatherFetchingException e) {
System.err.println(w.getAPIName() + " failed to fetch meteo");
}

View File

@ -51,16 +51,14 @@ public class WeatherDisplayBasicTest {
private static Stream<Arguments> display() {
return Stream.of(
Arguments.arguments(1, new StringBuilder()
.append("Source J + 0 \n")
.append("------------------------------+-----------------------------+\n")
.append("OpenMeteo | 07.60° 🌤 17.60km/h 151.00° 🡮| \n")
.append("------------------------------+-----------------------------+\n")
.append("WeatherAPI | 08.10° 🌤 17.45km/h 142.08° 🡮| \n")
.append("------------------------------+-----------------------------+\n")
.append("OpenWeatherMap | 13.41° 🌤 05.74km/h 142.13° 🡮| \n")
.append("------------------------------+-----------------------------+\n")
.toString()
Arguments.arguments(1, "Source J + 0 \n" +
"------------------------------+-----------------------------+\n" +
"OpenMeteo | 07.60° 🌤 17.60km/h 151.00° 🡮| \n" +
"------------------------------+-----------------------------+\n" +
"OpenWeatherMap | 13.41° 🌤 05.74km/h 142.13° 🡮| \n" +
"------------------------------+-----------------------------+\n" +
"WeatherAPI | 08.10° 🌤 17.45km/h 142.08° 🡮| \n" +
"------------------------------+-----------------------------+\n"
)
);