119 lines
3.7 KiB
Java
119 lines
3.7 KiB
Java
|
import java.util.*;
|
||
|
import java.util.stream.Collectors;
|
||
|
import java.io.*;
|
||
|
import java.util.zip.*;
|
||
|
import java.time.LocalDateTime;
|
||
|
|
||
|
/**
|
||
|
* La classe principale.
|
||
|
*
|
||
|
* Tous les traitements demandés sont faits dans la mêthode
|
||
|
* {@code repondreQuestions}.
|
||
|
* Il serait plus logique d'écrire des méthodes qui pemettraient d'améliorer
|
||
|
* la structuration et la réutilisation. Cependant l'objectif est ici la
|
||
|
* manipulation de l'API des collections, pas la structuration du code
|
||
|
* en sous-programmes.
|
||
|
*/
|
||
|
public class Main {
|
||
|
|
||
|
private static void repondreQuestions(Reader in) {
|
||
|
Iterable<PointDeVente> iterable = PointDeVenteUtils.fromXML(in);
|
||
|
|
||
|
// Construire un tableau associatif (pdvs) des points de vente avec un
|
||
|
// accès par identifiant
|
||
|
Map<Long, PointDeVente> pdvs = new HashMap<>();
|
||
|
|
||
|
for (PointDeVente pt_vente : iterable) {
|
||
|
pdvs.put(pt_vente.getIdentifiant(), pt_vente);
|
||
|
}
|
||
|
|
||
|
// // Nombre de point de vente
|
||
|
// int size_pdvs = pdvs.size();
|
||
|
// System.out.println(size_pdvs);
|
||
|
|
||
|
// // Afficher le nombre de services existants
|
||
|
// Set<String> services = new TreeSet<String>();
|
||
|
// for (PointDeVente pt_vente : pdvs.values()) {
|
||
|
// services.addAll(pt_vente.getServices());
|
||
|
// }
|
||
|
// int size_service = services.size();
|
||
|
// System.out.println(size_service);
|
||
|
|
||
|
// // Afficher les services fournis
|
||
|
// for (String service : services) {
|
||
|
// System.out.println(service);
|
||
|
// }
|
||
|
|
||
|
// Afficher la ville correspondant au point de vente d'identifiant 31075001
|
||
|
// PointDeVente pdv_id = pdvs.get(31075001L);
|
||
|
// System.out.println(pdv_id.getVille());
|
||
|
// // et le prix du gazole le 25 janvier 2018 à 10h.
|
||
|
// System.out.println(pdv_id.getPrix(Carburant.GAZOLE, LocalDateTime.parse("2018-01-25T10:00:00")));
|
||
|
|
||
|
// Afficher le nombre de villes offrant au moins un point de vente
|
||
|
// Set<String> ville_nbpdv = new TreeSet<String>();
|
||
|
// for (PointDeVente pointDeVente : pdvs.values()) {
|
||
|
// ville_nbpdv.add(pointDeVente.getVille());
|
||
|
// }
|
||
|
// System.out.println(ville_nbpdv.size());
|
||
|
|
||
|
// Afficher le nombre moyen de points de vente par ville
|
||
|
Map<String, Integer> ville_pdvmoyen = new HashMap<>();
|
||
|
for (PointDeVente pointDeVente : pdvs.values()) {
|
||
|
int count = ville_pdvmoyen.containsKey(pointDeVente.getVille()) ? ville_pdvmoyen.get(pointDeVente.getVille()) : 0;
|
||
|
ville_pdvmoyen.put(pointDeVente.getVille(), count + 1);
|
||
|
}
|
||
|
int total = 0;
|
||
|
for (Integer i : ville_pdvmoyen.values()) {
|
||
|
System.out.println(i);
|
||
|
total += i;
|
||
|
}
|
||
|
System.out.println(total/ville_pdvmoyen.size());
|
||
|
|
||
|
|
||
|
// A finir...
|
||
|
|
||
|
// le nombre de villes offrants un certain nombre de carburants
|
||
|
|
||
|
// Afficher le nombre et les points de vente dont le code postal est 31200
|
||
|
|
||
|
// Nombre de PDV de la ville de Toulouse qui proposent et du Gazole
|
||
|
// et du GPLc.
|
||
|
|
||
|
// Afficher le nom et le nombre de points de vente des villes qui ont au
|
||
|
// moins 20 points de vente
|
||
|
}
|
||
|
|
||
|
|
||
|
private static Reader ouvrir(String nomFichier)
|
||
|
throws FileNotFoundException, IOException
|
||
|
{
|
||
|
if (nomFichier.endsWith(".zip")) {
|
||
|
// On suppose que l'archive est bien formée :
|
||
|
// elle contient fichier XML !
|
||
|
ZipFile zfile = new ZipFile(nomFichier);
|
||
|
ZipEntry premiere = zfile.entries().nextElement();
|
||
|
return new InputStreamReader(zfile.getInputStream(premiere));
|
||
|
} else {
|
||
|
return new FileReader(nomFichier);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public static void main(String[] args) {
|
||
|
if (args.length != 1) {
|
||
|
System.out.println("usage : java Main <fichier.xml ou fichier.zip>");
|
||
|
} else {
|
||
|
try (Reader in = ouvrir(args[0])) {
|
||
|
repondreQuestions(in);
|
||
|
} catch (FileNotFoundException e) {
|
||
|
System.out.println("Fichier non trouvé : " + args[0]);
|
||
|
} catch (Exception e) {
|
||
|
System.out.println(e.getMessage());
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|