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

View File

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