package lab5;

import java.io.BufferedReader;
import java.io.IOException;
import java.util.*;

import martin.IO;

public class StatistiqueHashmap {
	/*properties*/
	private Map<Character,Double> _compte = new HashMap<Character,Double>();
	private int _qty=0;

	/*constructor*/
	private StatistiqueHashmap(){}

	/*mutator*/
	//populate
	public void add(int data){
		Character c;
		if (data < 256)
			c = new Character((char)data);
		else
			c = new Character((char)256);
		Double value = _compte.get(c);
		if (value == null){
			value = new Double(0);
		}
		_compte.put(c,value+1);

		_qty++;
	}

	//sort in an ugly way
	public String getStringSortedByValue(){
		HashMap<Double,Character> inversed = new HashMap<Double,Character>();
		String sorted = new String();
		Set<Character> keys = _compte.keySet();
		for (Character key : keys){
			inversed.put(_compte.get(key),key);
		}

		List<Double> vals = new ArrayList<Double>(inversed.keySet());

		Collections.sort(vals);
		for (Double key: vals){
			sorted += inversed.get(key).toString() + " => " + key.toString() + "\n";
		}

		return sorted;
	}

	//default method
	public String toString(){
		String tmp = new String("Statistique fichier binaire\n");
		return _compte.toString();
	}

	//main
	public static void main(String [] args) throws IOException{
		//initialisation
		String fichierClass = "LecteurFichierBinaire.class";
		BufferedReader lire = IO.openReader(fichierClass);
		StatistiqueHashmap stat = new StatistiqueHashmap();

		//boucle
		while(lire.ready()){
			int data = lire.read();
			stat.add(data);
		}
		lire.close();

		//affichage
		System.out.print(stat.getStringSortedByValue().toString());
	}
}
