Preciso fazer duas ordenações usando oCollections.sort. Uma já foi feita. O problema que quando faço a segunda ordenação, acaba “bagunçando” a primeira. Como posso fazer para ordenar de um jeito e depois de outro (sem estragar a primeira ordenação)?
Qual foi o código, poste o seu código para entendermos o que precisa fazer!
Você precisa implementar um Comparator que compara os campos que você quer. Se estiver usando Java 8, pode fazer assim:
Comparator.comparing((SuaClasse c)-> c.primeiroCampo)
.thenComparing(c->c.segundoCampo);
Se tiver getter na classe, pode fazer assim:
Comparator.comparing(SuaClasse::getPrimeiroCampo)
.thenComparing(SuaClasse::getSegundoCampo);
Isso você vai passar no segundo parâmetro do método Comparator.sort.
Buenas, aqui vai então:
listRestaurants.addAll(mapRestaurants.values());
Collections.sort(listRestaurants, new Comparator<BusinessDTO>() {
@Override
public int compare(BusinessDTO o1, BusinessDTO o2) {
int c = o1.getPlatter().compareTo(o2.getPlatter());
if (c == 0 && o1.getTradingAs() != null) {
c = o1.getTradingAs().compareTo(o2.getTradingAs());
}
return c;
}
});
A idéia é ordenar uma lista de restaurantes, a “listRestaurants”; Esse primeiro método já existe, e ordena por uma variável chamada “platter”, cujos valores podem ser “0” ou “1”. No caso, ele ordena essa lista colocando todos os que tiverem “platter” por último e em ordem alfabética (como faz isso eu não entendi direito). Agora preciso de um método que ordene as variáveis do tipo “collection” cujo valor é uma string “Y” ou “N” (não me perguntem porque é assim, não fui eu que fiz o código). Enfim, não sei se dar pra ajudar só sabendo isso, mas tah aí.
PS: Já tentei fazer um método exatamente igual a esse, só trocando “getPlatter” por “getCollection”. Funcionou, porém desordenou os “platters”.