Pessoal,
Tenho a seguinte estrutura de dados:
private static Map<String, Entry> names;
private static Map<String, Set><Entry>> labels;
O método que insere dados na classe é o seguinte:
public static void add(final String namep, final String numberp,
final String addrp, final String descriptionp,
final GregorianCalendar dobp) {
names.put(namep, new EntryImpl(namep, numberp, addrp, descriptionp,
dobp));
}
O método que recupera dados dessa estrutura é o seguinte:
public static List<Entry> getEntries() {
return new LinkedList<Entry>(names.values());
}
E os seguintes dados inseridos nela:
static {
names = new HashMap<String, Entry>();
labels = new HashMap<String, Set><Entry>>();
add("Elendil", "12223330000", "Rua dos Nerds, 0", "A nerd",
new GregorianCalendar(1980, 1, 7));
add("Porthos", "55555555555", "Rua dos Nerds, 0", "A nerd",
new GregorianCalendar(1980, 1, 7));
add("Denethor", "999999999", "Rua dos Nerds, 0", "A nerd",
new GregorianCalendar(1980, 1, 7));
add("Aramis", "28934792839", "Rua dos Belos, 100", "Someone handsome",
new GregorianCalendar(1982, 11, 6));
add("Athos", "61616161616", "Rua dos Doidos, 42", "Someone mad",
new GregorianCalendar(1990, 1, 30));
try {
addLabel("Elendil", "work");
addLabel("Aramis", "school");
addLabel("Aramis", "work");
removeLabel("Elendil", "work");
addLabel("Elendil", "club");
} catch (NameNotFoundException nnf) {
nnf.printStackTrace();
} catch (LabelNotFoundException lnf) {
lnf.printStackTrace();
}
}
Preciso, usando comparable ou comparator ordenar tal estrutura, especificamente names, por idade, names e addr.
Criei a seguinte classe:
public class Comparador implements Comparator<Entry> {
private static final int SORT_BY_ADDRESS = 0;
private static final int SORT_BY_AGE = 1;
private static final int SORT_BY_NAME = 2;
protected Map<String, Entry> entries;
public int ordem;
public void setOrdem(int ordem) {
this.ordem = ordem;
}
public int compare(Entry o1, Entry o2) {
int result = 0;
String nome1, nome2;
String end1, end2;
GregorianCalendar data1, data2;
switch (ordem) {
case SORT_BY_ADDRESS:
end1 = o1.getAddr();
end2 = o2.getAddr();
result = end1.compareToIgnoreCase(end2); // os
break;
case SORT_BY_AGE:
data1 = o1.getDateOfBirth();
data2 = o2.getDateOfBirth();
result = data1.compareTo(data2);
break;
case SORT_BY_NAME:
nome1 = o1.getName();
nome2 = o2.getName();
result = nome1.compareToIgnoreCase(nome2);
break;
}
return result;
}
}
De dentro de meu programa principal fiz o seguinte:
int criterio; // campo pelo qual se deseja ordenar
// capturo o índice selecionado do spinner
criterio = s.getSelectedItemPosition();
Comparador comp = new Comparador();
comp.setOrdem(criterio);
e = NameDirectory.getEntries();
Collections.sort(e, comp);
String phone, addr, description, name;
GregorianCalendar data;
for (int i = 0; i < e.size(); i++) {
name = e.get(i).getName();
phone = e.get(i).getPhone();
addr = e.get(i).getAddr();
description = e.get(i).getDescription();
data = e.get(i).getDateOfBirth();
NameDirectory.add(name, phone, addr,description, data);
}
e = NameDirectory.getEntries();
agora quando exbo o conteúdo da variável e vejo que a ordem não mudou e permanece aquela da atribuição inicial Static {… } acima.
Agradeço qualquer ajuda.