Ajuda com Map()

Boa tarde.

Tenho um sistema de registro de apostas.
Estou precisando gerar ao final do relatório de apostas as dezenas mais apostadas em ordem decrescente. Porem não estou conseguindo pensar em como resolver este problema.

Iniciei algo assim

SortedMap<Integer, List><Integer>> mapTemp = new TreeMap<Integer, List><Integer>>();
		for (Aposta aposta : listAposta) {
			if (Utils.isNotObjValid(mapTemp.get(Integer.parseInt(aposta.getDezena1())))) {
				List<Integer> list = new ArrayList<Integer>();
				list.add(Integer.parseInt(aposta.getDezena1()));
				mapTemp.put(Integer.parseInt(aposta.getDezena1()), list);
			} else {
				mapTemp.get(Integer.parseInt(aposta.getDezena1())).add(Integer.parseInt(aposta.getDezena1()));
			}
			if (Utils.isNotObjValid(mapTemp.get(Integer.parseInt(aposta.getDezena2())))) {
				List<Integer> list = new ArrayList<Integer>();
				list.add(Integer.parseInt(aposta.getDezena2()));
				mapTemp.put(Integer.parseInt(aposta.getDezena2()), list);
			} else {
				mapTemp.get(Integer.parseInt(aposta.getDezena2())).add(Integer.parseInt(aposta.getDezena2()));
			}
			if (Utils.isNotObjValid(mapTemp.get(Integer.parseInt(aposta.getDezena3())))) {
				List<Integer> list = new ArrayList<Integer>();
				list.add(Integer.parseInt(aposta.getDezena3()));
				mapTemp.put(Integer.parseInt(aposta.getDezena3()), list);
			} else {
				mapTemp.get(Integer.parseInt(aposta.getDezena3())).add(Integer.parseInt(aposta.getDezena3()));
			}
			if (Utils.isNotObjValid(mapTemp.get(Integer.parseInt(aposta.getDezena4())))) {
				List<Integer> list = new ArrayList<Integer>();
				list.add(Integer.parseInt(aposta.getDezena4()));
				mapTemp.put(Integer.parseInt(aposta.getDezena4()), list);
			} else {
				mapTemp.get(Integer.parseInt(aposta.getDezena4())).add(Integer.parseInt(aposta.getDezena4()));
			}
			if (Utils.isNotObjValid(mapTemp.get(Integer.parseInt(aposta.getDezena5())))) {
				List<Integer> list = new ArrayList<Integer>();
				list.add(Integer.parseInt(aposta.getDezena5()));
				mapTemp.put(Integer.parseInt(aposta.getDezena5()), list);
			} else {
				mapTemp.get(Integer.parseInt(aposta.getDezena5())).add(Integer.parseInt(aposta.getDezena5()));
			}
			if (Utils.isNotObjValid(mapTemp.get(Integer.parseInt(aposta.getDezena6())))) {
				List<Integer> list = new ArrayList<Integer>();
				list.add(Integer.parseInt(aposta.getDezena6()));
				mapTemp.put(Integer.parseInt(aposta.getDezena6()), list);
			} else {
				mapTemp.get(Integer.parseInt(aposta.getDezena6())).add(Integer.parseInt(aposta.getDezena6()));
			}
		}

Parei ai, não sei por onde ir.
Ainda tenho mais um problema.
Gostaria de gerar o relatorio com o titulo da dezena e abaixo a quantidade. Estou usando itext (não tenho problemas nele), somente na logica do problema.

Ex.

(celular titulo) "Dezena" + mapTemp.getAlgumaCoisa() (celular quantidade) mapTemp.getAlgumaCoisa()
A ideia seria a cada 6 uma quebra de linha para novo titulo.
Alguem tem uma ideia?

Você precisa de todos os Valores do mapa?
http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html#values()

Ou todas as chaves de entrada?
http://download.oracle.com/javase/6/docs/api/java/util/SortedMap.html#keySet()

De resto não seria apenas criar um for() ou uma variável de contagem para iterar de 6 em 6?

To meio bloqueado hj. Vou dar uma olhada amanhã.

Digamos que você tenha uma classe assim:

class Aposta {
    public int dezena;
    public int quantidade;
    public Aposta (int dezena, int quantidade) { this.dezena = dezena; this.quantidade = quantidade; }
    public String toString() { return String.format ("(%d: %d)", dezena, quantidade); }
}

e queira listar as dezenas mais apostadas, em ordem decrescente de quantidade. (Digamos que você tenha uma coleção de Apostas, já preparada). Você pode tentar algo como:

// Apostas
Collection<Aposta> apostas = new ArrayList<Aposta>();
apostas.add (new Aposta (10, 20));
apostas.add (new Aposta (13, 1));
apostas.add (new Aposta (11, 20));
apostas.add (new Aposta (7, 50));
// Dezenas mais apostadas, em ordem decrescente de quantidade
Map<Integer, List<Aposta > > dezenasMaisApostadas = new TreeMap<Integer, List<Aposta> > (Collections.reverseOrder());
for (Aposta aposta : apostas) {
    int quantidade = aposta.quantidade;
    List<Aposta> apostasComDeterminadaQuantidade = dezenasMaisApostadas .get (quantidade);
    if (apostasComDeterminadaQuantidade == null) {
        apostasComDeterminadaQuantidade = new ArrayList<Aposta>();
        dezenasMaisApostadas.put (quantidade, apostasComDeterminadaQuantidade);
    }
    apostasComDeterminadaQuantidade.add (aposta);
}

Você, ao listar as dezenas mais apostadas, em ordem decrescente de quantidade, vai ter algo como:

(7, 50)
(10, 20), (11, 20)
(13, 1)