import java.util.ArrayList; import java.util.Scanner; import java.io.FileInputStream; import java.util.Collections; public class CovidDatabase { private ArrayList list; private static final int SAFE = 5; public CovidDatabase() { list = new ArrayList(); } private void transferCovidData(String filename){ } public ArrayList topTenDeaths(int m, int d){ ArrayList result = new ArrayList(); ArrayList temp = getDailyDeaths(m, d); Collections.sort(temp); if (temp.size() ==0){ return result; } for (int i = 0; i < 10; i++){ result.add(temp.get(i)); } return result; } public ArrayList safeToOpen(String st){ ArrayList result = new ArrayList(); int match = 0; int previousDailyInfections = -1; for (CovidEntry c: list){ if (c.getState().equalsIgnoreCase(st)) { if (previousDailyInfections == -1) { previousDailyInfections = c.getDailyInfections(); match += 1; } else if (c.getDailyInfections() < previousDailyInfections) { match += 1; } else { match = 1; result.clear(); } result.add(c); previousDailyInfections = c.getDailyInfections(); } if (match == SAFE) { return result; } } return null; } public ArrayList listMinimumDailyInfections(int m, int d, int min){ ArrayList result = new ArrayList(); for (CovidEntry c: list){ if (c.getMonth() == m && c.getDay() == d && c.getDailyInfections() >= min){ result.add(c); } } return result; } public int countRecords(){ return list.size(); } public int getTotalDeaths(){ int result = 0; for (CovidEntry c: list){ result += c.getDailyDeaths(); } return result; } public int getTotalInfections(){ int result = 0; for (CovidEntry c: list){ result += c.getDailyInfections(); } return result; } public int countTotalInfections(int m, int d){ int result = 0; for (CovidEntry c: list){ if (c.getMonth() == m && c.getDay() == d){ result += c.getDailyInfections(); } } return result; } public int countTotalDeaths(int m, int d){ int result = 0; for (CovidEntry c: list){ if (c.getMonth() == m && c.getDay() == d){ result += c.getDailyDeaths(); } } return result; } public ArrayList getDailyDeaths(int m, int d){ ArrayList result = new ArrayList(); for (CovidEntry c: list){ if (c.getMonth() == m && c.getDay() == d){ result.add(c); } } return result; } //State public CovidEntry peakDailyDeaths(String st) { //iterate over our database //find highest deathcount that matches our state (st) CovidEntry result = null; int max = 0; for(CovidEntry c : list){ if( c.getState().equalsIgnoreCase(st)){ if( c.getDailyDeaths() > max){ max = c.getDailyDeaths(); result = c; } } } return result; } //Month day public CovidEntry peakDailyDeaths(int m, int d) { //iterate over our database //find highest deathcount that matches our state (st) CovidEntry result = null; int max = 0; for(CovidEntry c : list){ if (c.getMonth() == m && c.getDay() == d) { if (c.getDailyDeaths() > max) { max = c.getDailyDeaths(); result = c; } } } return result; } public CovidEntry mostTotalDeaths(){ CovidEntry result = null; int max = 0; for(CovidEntry c : list){ if( c.getTotalDeaths() > max){ max = c.getTotalDeaths(); result = c; } } return result; } public void readCovidData(String filename){ Scanner scnr = null; FileInputStream fs = null; try{ fs = new FileInputStream(filename); scnr = new Scanner(fs); scnr.useDelimiter("[,\r\n]+"); scnr.nextLine(); while(scnr.hasNext()){ String state = scnr.next(); int month = scnr.nextInt(); int day = scnr.nextInt(); int di = scnr.nextInt(); int dd = scnr.nextInt(); int ti = scnr.nextInt(); int td = scnr.nextInt(); CovidEntry c = new CovidEntry(state, month, day, di, dd, ti, td); list.add(c); } fs.close(); } catch(Exception e){ System.out.println("File error with " + filename); } } }