Ordenar collection?

como que eu ordeno uma collection? COLLECTION e nao LIST!

vlw

Não ordena. Algumas coleções não são ordenaveis (é o caso do Set, por exemplo).

O que você deve fazer é usar o construtor de cópia de uma das coleções ordenáveis (ArrayList ou TreeSet) para copiar os dados de sua Collection, e então ordena-los.

Por exemplo, no caso de uma coleção de Integers:

public List<Integer> elementosOrdenados(Collection<Integer> algumaCollection) { List<Integer> listaOrdenada = new ArrayList<Integer>(algumaCollection); //Faz a cópia Collections.sort(listaOrdenada); return listaOrdenada; }

Note que o resultado é o que você queria, uma Collection ordenada.

Fala Viny,

Então, se eu usar um List, não sei pq cargas d’agua da um ClassCastException…só funciona quando eu chamo o iterator direto

Dentro do Bean, tem um método que retorna uma collection, uma collection que contém diversos atributos statics e não sei pq só funciona se eu usar:

Iterator i = UF.getUFs().iterator();

O que diz o seu ClassCastException?

e o código dessa linha

    List listaWee = new ArrayList();
    
    listaWee = (List)UF.getUFs().iterator();

Alguma idéia?

Se você vai usar um Map ou um Set, é melhor usar um que já esteja ordenado naturalmente, como é o caso do TreeSet ou TreeMap. (O LinkedHashSet ou LinkedHashMap seguem a ordem de inserção, não a ordem “lexicográfica” como se costuma dizer.)

e como seria isso thingol?

pq aquele getUFs() retorna uma Collection!

Eu falei em usar o construtor de cópia, não fazer um cast.

List listaWee = new ArrayList(UF.getUFs());

Com cast não funciona mesmo.

Se o tal método retorna uma Collection, e você não sabe o que a tal Collection é na verdade, faça como o ViniGodoy lhe aconselhou - ele já te deu uma receitinha de bolo, é só seguir.

Continua com classcast

    List listaWee = new ArrayList(UF.getUFs());

Esse getUFs(), é um método static, sera que isso tem alguma coisa a ver?

  private static final transient Map UF_SIGLA_MAPPING = new HashMap(26);

  public static Collection getUFs() {
    return UF_SIGLA_MAPPING.values();
  }

Acho que deve ser algo ai =o

Qual é o ClassCast que dá agora?

Realmente não devia estar dando.

    List listaWee = new ArrayList(UF.getUFs());
    
**linha 28
    Collections.sort(listaWee);

Um ClassCast exception na linha do sort pode ocorrer pelos seguintes motivos:

  1. As UFs não implementam comparable. Nesse caso, você deve fornecer um Comparator para o método Sort;
  2. Existem objetos que não são UFs retornados juntamente com essa lista. Se for isso é bug, tem que corrigir.

Acho a primeira mais provável.

Realmente é difícil saber o que deve ser ordenado em br.com.impressao.common.adt.uf.UF se você não der a descrição da classe. Será a sigla da unidade federativa, ou então o nome? Ou então algum código interno?

unidade federativa…é que a classe ta bem grande…

opa

consegui resolver :smiley:

fiz o conselho di Viny de colocar o Comparator e resolveu

vlw ae

[]'s

Opa pessoal!

Tenho uma pergunta… que acho que ja sei a resposta…
Fico gravando um log no prevayler…
um objeto do tipo Dado…
Gravo um Dado por segundo e funciona normalmente… durante algumas horas…
dps ele para de listar os dados e mostra o seguinte erro?
Eis a minha pergunta:
Qual o tamanho maximo que pode atingir o arrayList?

java.lang.NullPointerException
at br.com.pacote.persistencia.Dado.compareTo(Dado.java:590)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.mergeSort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Hein? O que? Como? Onde? Quando?

Esse tópico já tava fazendo aniversário…

O tamanho máximo de um arrayList é o de um int de elements (4 bilhões), ou a memória reservada para o Java. O que acabar primeiro. Normalmente é a segunda.

Agora, o seu erro é de NullPointerException, o que significa que um dos atributos usados na comparação está nulo.
Descubra qual é.