Olá pessoal. Minha dúvida é a seguinte: Tenho uma lista de String (primeiro crio um vetor String [] , e depois uso o método Arrays.asList para transformar em lista), e quero fazer a ordenação dessa lista conforme uma posição N desse vetor, e pela ordem que eu escolha, não em ordem alfabética. O código da UF fica nas posições 17 e 18, e eu quero ordenar da seguinte maneira: 1 - RS, 2 - SC, 3 - PR, 4 - SP, 5 - outros estados. Alguém pode me dar uma luz? Obrigado!!
Implemente seu próprio Comparator:
Opa, desculpe a ignorancia, mas ainda nao consegui implementar… sei como ordenar por ordem alfabética por exemplo, mas nao consegui implementar meu problema. Segue o código:
[code]public class Teste {
String[] lista = {“SALVADOR - BA”,
“SAO PAULO - SP”,
“PORTO ALEGRE - RS”,
“RIO DE JANEIRO - RJ”,
“FLORIANOPOLIS - SC”,
“CURITIBA - PR”
};
public void ordenaLista() {
List<String> listaOrdenada = Arrays.asList(this.lista);
Collections.sort(listaOrdenada, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
String s = Character.toString(s1.charAt(17))
+ Character.toString(s1.charAt(18));
//aqui a lógica que nao estou conseguindo
return 0;
});
for (String s : listaOrdenada) {
System.out.println(s);
}
}
public static void main(String[] args) {
Teste t = new Teste();
t.ordenaLista();
}
}
[/code]
Se eu entendi você quer ordenar pela sigla da cidade, certo?
Se for isso segue abaixo o “ajuste”
[code]
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Teste {
String[] lista = {“SALVADOR - BA”,
“SAO PAULO - SP”,
“PORTO ALEGRE - RS”,
“RIO DE JANEIRO - RJ”,
“FLORIANOPOLIS - SC”,
“CURITIBA - PR”
};
public void ordenaLista() {
List<String> listaOrdenada = Arrays.asList(this.lista);
Collections.sort(listaOrdenada, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.substring(17, 19).compareTo(s2.substring(17,19));
}
});
for (String s : listaOrdenada) {
System.out.println(s);
}
}
public static void main(String[] args) {
Teste t = new Teste();
t.ordenaLista();
}
}[/code]
[quote=ribclauport]Se eu entendi você quer ordenar pela sigla da cidade, certo?
Se for isso segue abaixo o “ajuste”
[code]
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Teste {
String[] lista = {“SALVADOR - BA”,
“SAO PAULO - SP”,
“PORTO ALEGRE - RS”,
“RIO DE JANEIRO - RJ”,
“FLORIANOPOLIS - SC”,
“CURITIBA - PR”
};
public void ordenaLista() {
List<String> listaOrdenada = Arrays.asList(this.lista);
Collections.sort(listaOrdenada, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.substring(17, 19).compareTo(s2.substring(17,19));
}
});
for (String s : listaOrdenada) {
System.out.println(s);
}
}
public static void main(String[] args) {
Teste t = new Teste();
t.ordenaLista();
}
}[/code][/quote]
Dessa maneira irá ordenar por ordem alfabética, nao é assim que eu preciso… eu quero por uma ordem personalizada: primeiro RS, depois, SC, depois PR, depois SP, depois RJ e depois BA…
Porém a sua personalização, não tem uma regra que a torne constante, isso que você esta dizendo deve então ser manipulada por um arrayList, sendo definida pelo indíce desta forma você insere no indice que desejar:
Pois imagine um compareTo implementado com vários ifs ou sei lá tipo if(string.equals(“RS”) return -1, ou return 0, não haverá lógica pensou eu
em implementar um Comparable para isso eu faria assim:
[code] String[] lista = {“SALVADOR - BA”,
“SAO PAULO - SP”,
“PORTO ALEGRE - RS”,
“RIO DE JANEIRO - RJ”,
“FLORIANOPOLIS - SC”,
“CURITIBA - PR”
};
//1 - RS, 2 - SC, 3 - PR, 4 - SP, 5
List<String> listaList = new ArrayList<String>();
listaList.add(0,lista[2]);
listaList.add(0,lista[4]);
listaList.add(0,lista[5]);
listaList.add(0,lista[1]);
for(String x : listaList){
System.out.println(x);
}[/code]
Consegui, da seguinte maneira:
[code]import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Teste {
String[] lista = {“SALVADOR - BA”,
“SAO PAULO - SP”,
“PORTO ALEGRE - RS”,
“RIO DE JANEIRO - RJ”,
“FLORIANOPOLIS - SC”,
“CURITIBA - PR”
};
public void ordenaLista() {
List listaOrdenada = Arrays.asList(this.lista);
Collections.sort(listaOrdenada, new Comparator() {
@Override
public int compare(String s1, String s2) {
String [] ordem = {“RS”, “SC”, “PR”, “SP”, “RJ”, “BA”};
List ordemList = Arrays.asList(ordem);
String uf1 = s1.substring(17, 19);
String uf2 = s2.substring(17, 19);
int i1 = ordemList.indexOf(uf1);
int i2 = ordemList.indexOf(uf2);
return i1-i2;
}
});
for (String s : listaOrdenada) {
System.out.println(s);
}
}
public static void main(String[] args) {
Teste t = new Teste();
t.ordenaLista();
}
} [/code]
Obrigado pela ajuda pessoal!