Ordenando objetos com Collections.sort

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.

2 curtidas

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”.