package amphis;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.TreeMap;
// illustration de l'utilisation de TreeMap sur des données de consommation
// électrique en France récupérées sur
// https://www.data.gouv.fr/fr/datasets/consommation-quotidienne-brute/
class Date implements Comparable<Date> {
final int year, month, day;
final int hours, minutes;
// format "15/04/2015" et "12:30"
Date(String d, String t) {
String[] dc = d.split("/");
this.day = Integer.parseInt(dc[0]);
this.month = Integer.parseInt(dc[1]);
this.year = Integer.parseInt(dc[2]);
String[] tc = t.split(":");
this.hours = Integer.parseInt(tc[0]);
this.minutes = Integer.parseInt(tc[1]);
}
@Override
public int compareTo(Date that) {
if (this.year != that.year) return this.year - that.year;
if (this.month != that.month) return this.month - that.month;
if (this.day != that.day) return this.day - that.day;
if (this.hours != that.hours) return this.hours - that.hours;
return this.minutes - that.minutes;
}
@Override
public String toString() {
return String.format("%02d", this.day) + "/" +
String.format("%02d", this.month) + "/" + this.year + " " +
String.format("%02d", this.hours) + ":" +
String.format("%02d", this.minutes);
}
}
class Amphi5 {
public static void main(String[] args) throws FileNotFoundException {
double start = System.currentTimeMillis();
Scanner sc = new Scanner(new File("consommation-quotidienne-brute.csv"));
sc.nextLine(); // ignorer les entêtes
// on remplit un dictionnaire date -> consommation électrique
TreeMap<Date, Integer> map = new TreeMap<>();
while (sc.hasNextLine()) {
String s = sc.nextLine();
String[] col = s.split(";");
Date e = new Date(col[1], col[2]);
int v = Integer.parseInt(col[8]);
map.put(e, v);
}
sc.close();
System.out.println(map.size() + " entrées entre "
+ map.firstKey() + " et " + map.lastKey());
// exemple d'opération sur TreeMap : on récupère la consommation
// d'octobre 2015
Date from = new Date("01/10/2015", "00:00");
Date to = new Date("31/10/2015", "23:30");
Map<Date, Integer> oct2015 = map.subMap(from, to);
System.out.println("octobre 2015 : " + oct2015.size() + " entrées");
int total = 0;
for (Entry<Date, Integer> e : oct2015.entrySet())
total += e.getValue();
System.out.println("total : " + total + " MWh");
System.err.println((System.currentTimeMillis() - start) + " ms");
}
}