Para ordenar por dois atributos ao mesmo tempo, basta escrever um Comparator para isso:
[code]public class ComparadorPorCidadeEProfissao extends Comparator<MinhaClasse>
{
public int compare(MinhaClasse o1, MinhaClasse o2) {
int cidade = o1.getCidade().compare(o2.getCidade());
if (cidade != 0) return cidade; //Caso as cidades sejam diferentes, ordena pela cidade.
//Se forem iguais, vamos ordenar pela profissão.
int prof = o1.getProfissao().compare(o2.getProfissao());
if (prof != 0) return prof;
//Se as profissões forem iguais, ordenamos pelo nome
return o1.getNome().compareTo(o2.getNome());
}[/code]
Uma lista contendo:
Curitiba, Engenheiro Civil, Marcio
Curitiba, Analista de Sistemas, Vinicius
Anápolis, Zootecnico, Pedro
Curitiba, Veterinário, Marcelo
Curitiba, Engenheiro Civil, Andreia
Anápolis, Botânico, Laura
Ficaria ordenada usando aquele comparador assim:
Anápolis, Botânico, Laura
Anápolis, Zootecnico, Pedro
Curitiba, Analista de Sistemas, Vinicius
Curitiba, Engenheiro Civil, Andreia
Curitiba, Engenheiro Civil, Marcio
Curitiba, Veterinário, Marcelo
Como você quer filtros dinâmicos, ainda recomendo o uso de um JTable no lugar de um JList, e da classe de auto-filtro, do link abaixo. Ela não só faz ordenação como filtragem também, igualzinho ao MS Excel. Usuários tendem a gostar muito dela. 