[RESOLVIDO]ordenação personalizada de list de String

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!