gente ja dei uma olhada nos tópicos por ai mas não consegui fazer…
Seguinte tenho um ArrayList de objetos do tipo Cadastro.
ArrayListlista=newArrayList();Cadastrocadastro=newCadastro();cadastro.setCodigo(47);cadastro.setNome("Tiago");cadastro.setCidade("São Paulo");Cadastrocadastro2=newCadastro();cadastro2.setCodigo(19);cadastro2.setNome("Jose");cadastro2.setCidade("Rio de Janeiro");Cadastrocadastro3=newCadastro();cadastro3.setCodigo(22);cadastro3.setNome("Jose");cadastro3.setCidade("Manaus");lista.add(cadastro3);lista.add(cadastro1);lista.add(cadastro2);
Gente queria ordenar esse meu ArrayList de modo que as posições na Array ficassem ordenadas conforme o codigo do objeto.
Tipo:
Array(0) vai ter o codigo 19
Array(1) vai ter o codigo 22
Array(2) vai ter o codigo 47
Cara seguinte… na verdade eu tenho um ArrayList bem grande, cheio de objetos do Tipo cadastro. Não tem como eu comparar
public int compare(Cadastro cad1, Cadastro cad2)…
Outro detalhe no meu objeto cadastro, o codigo é um int e não um Integer()…
J
jaireltonPJ
Você comparar? Não entendi… Quem vai ordenar é o metodo Collections.sort(), ele vai usar essa classe Comparator aí pra fazer isso…
E eu usei Integer.valueOf() justamente porque eu imaginei que o codigo é um int, se não eu faria direto…
cad1.getCodigo().campareTo(cad2.getCodigo());
Mas como é int, eu tenho que converter pra Integer primeiro.
Tente fazer isso aí e veja se funciona…
T
tiago_tikasPJ
cara vo te pedi desculpa mas naum to entendendo..
Oh dexa eu te mostra o que eu tenho:
public void insereNoArray(Cadastro cadastro){
/* este objeto precisa ficar na ordem correta no array,
que é ordenado pelo codigo */
}
Se eu so kisesse adicionar este objeto no meu Array Lis eu fazia assim:
public void insereNoArray(Cadastro cadastro){
/* este objeto precisa ficar na ordem correta no array,
que é ordenado pelo codigo */
lista.add(cadastro);
}
Meu problema é que eu preciso que este este array sempre esteja ordena pelos codigos dos objetos...
Como eu coloco akele seu codigo dentro desse metodo??
J
jaireltonPJ
O que esse meu codigo faz é chamar o metodo Collections.sort(), esse metodo sort() pega sua lista passada como parametro e pega um objeto que implementa a classe Comparator e usa esse Comparator pra ir ordenando o objeto, a interface Comparator define um metodo chamado compare() que recebe dois objetos (objetos esses que serão passados pelo Collections.sort())... ele deve retornar um numero negativo se o 1º objeto for "menor" que o segundo, 0 se eles forem iguais, e positivo se o 1º for "maior" que o segundo...
Esse codigo vai funcionar para seu caso se você coloca-lo logo apos inserir o objeto, porem isso não é muito interessante pois você estará reordenando a lista toda vez que inserir um objeto... o ideal é você implementar a interface Comparable na sua classe Cadastro e usar uma coleção ordenada como um TreeSet no lugar de ArrayList...
O TreeSet já ordena automaticamente seus objetos...
ex.:
publicclassCadastroimplementsComparable<Cadastro>{privateintcodigo;privateStringnome;//get e setpublicintcompareTo(Cadastrocad){returnIngeger.valueOf(getCodigo()).compareTo(cad.getCodigo());}}SortedSetset=newTreeSet();Cadastrocadastro=newCadastro();cadastro.setCodigo(47);cadastro.setNome("Tiago");cadastro.setCidade("SãoPaulo");set.add(cadastro);