Saudações …
Estou trabalhando em um pequeno projeto em Django rodando na appengine do Google e nesse projeto me surgiu a necessidade de mostrar os dados agrupados da seguinte maneira:
ano
mes
dia
melhor exemplificado no seguinte código(solução meio tosca mas tudo bem):
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
/**
*
* @author markus
*/
public class Main {
public static void main(String[] args) {
List<Entrada> entradas = new ArrayList<Entrada>();
entradas.add(new Entrada("titulo", "texto", 2010, 11));
entradas.add(new Entrada("titulo", "texto", 2010, 12));
entradas.add(new Entrada("titulo", "texto", 2011, 01));
entradas.add(new Entrada("titulo", "texto", 2011, 02));
entradas.add(new Entrada("titulo", "texto", 2012, 03));
entradas.add(new Entrada("titulo", "texto", 2012, 04));
entradas.add(new Entrada("titulo", "texto", 2013, 03));
entradas.add(new Entrada("titulo", "texto", 2013, 04));
entradas.add(new Entrada("titulo", "texto", 2014, 04));
entradas.add(new Entrada("titulo", "texto", 2014, 04));
/**
* agrupar por ano
*/
HashMap<Integer, List<Entrada>> mapAno =
new HashMap<Integer, List<Entrada>>();
for (Entrada entrada : entradas) {
if (!mapAno.containsKey(entrada.getAno())) {
List<Entrada> lista = new ArrayList<Entrada>();
lista.add(entrada);
mapAno.put(entrada.getAno(), lista);
} else {
List<Entrada> listTemp = mapAno.get(entrada.getAno());
listTemp.add(entrada);
mapAno.put(entrada.getAno(), listTemp);
}
}
//System.out.println(mapAno);
/**
* agrupar pelo mes
*/
HashMap<Integer, HashMap<Integer, List<Entrada>>> mapAnoMes =
new HashMap<Integer, HashMap<Integer, List<Entrada>>>();
for (Integer chave : mapAno.keySet()) {
HashMap<Integer, List<Entrada>> mapMes =
new HashMap<Integer, List<Entrada>>();
List<Entrada> lista = mapAno.get(chave);
for (Entrada entrada : lista) {
if (!mapMes.containsKey(entrada.getMes())) {
List<Entrada> listaEntrada = new ArrayList<Entrada>();
listaEntrada.add(entrada);
mapMes.put(entrada.getMes(), listaEntrada);
} else {
List<Entrada> listTemp = mapMes.get(entrada.getMes());
listTemp.add(entrada);
mapMes.put(entrada.getMes(), listTemp);
}
mapAnoMes.put(chave, mapMes);
}
}
/**
* ordenar as chaves do maior para menor
*/
Comparator<Integer> comparator = new Comparator<Integer>() {
public int compare(Integer t, Integer t1) {
if(t > t1){
return -1;
} else {
return 1;
}
}
};
/**
* exibir os dados
*/
List<Integer> listaOrdenadaAnos = new ArrayList(mapAnoMes.keySet());
Collections.sort(listaOrdenadaAnos, comparator);
for (Integer chaveAnos : listaOrdenadaAnos) {
System.out.println(String.valueOf(chaveAnos));
HashMap<Integer, List<Entrada>> listaMeses =
mapAnoMes.get(chaveAnos);
List<Integer> listaOrdenadaMeses =
new ArrayList<Integer>(listaMeses.keySet());
Collections.sort(listaOrdenadaMeses, comparator);
for (Integer chaveMeses : listaOrdenadaMeses) {
System.out.println("----".concat(String.valueOf(chaveMeses)));
List<Entrada> listaEntradas = listaMeses.get(chaveMeses);
for (Entrada entrada : listaEntradas) {
System.out.println("--------".concat(entrada.toString()));
}
}
}
//System.out.println(mapAnoMes);
}
public static class Entrada {
private String titulo;
private String texto;
private int ano;
private int mes;
public Entrada(String titulo, String texto, int ano, int mes) {
this.titulo = titulo;
this.texto = texto;
this.ano = ano;
this.mes = mes;
}
public int getAno() {
return ano;
}
public void setAno(int ano) {
this.ano = ano;
}
public int getMes() {
return mes;
}
public void setMes(int mes) {
this.mes = mes;
}
public String getTexto() {
return texto;
}
public void setTexto(String texto) {
this.texto = texto;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
@Override
public String toString() {
return this.texto.concat(",").concat(this.titulo).
concat(",").concat(String.valueOf(this.ano).
concat(",").concat(String.valueOf(this.mes)));
}
}
}
O código acima gera a seguinte saida:
2014
----4
--------texto,titulo,2014,4
--------texto,titulo,2014,4
2013
----4
--------texto,titulo,2013,4
----3
--------texto,titulo,2013,3
2012
----4
--------texto,titulo,2012,4
----3
--------texto,titulo,2012,3
2011
----2
--------texto,titulo,2011,2
----1
--------texto,titulo,2011,1
2010
----12
--------texto,titulo,2010,12
----11
--------texto,titulo,2010,11
Pois bem … gostaria que alguem me enviasse um exemplo de como fazer isso em Python já que não consegui pensar em alguma melhor forma de ser feito, além disso sou iniciante na linguagem e estou bem perdido…
):