[RESOLVIDO] Problema de nullPointer ao usar BeanComparator + Collection.sort

4 respostas
A

Olá,
Estou com um problema de nullPointer.
Toda vez que executo o seguinte código da o erro de null pointer

ComparatorChain cc = new ComparatorChain();
                                cc.addComparator(new BeanComparator("nrDia"));
                                cc.addComparator(new BeanComparator("dsHorario"));
                                
                                Collections.sort(meuObjeto, cc);
O erro ocorre na hora de fazer o collection sort, no caso a comparação Existe alguma de resolver este problema? Digo com classes nativas do java, se tiver, estarei no aguardo, enquanto isto vo continuar pesquisando. Obrigado pela atenção.

4 Respostas

E

EDIT - Você pode usar um BeanComparator, mas deve usar o segundo parâmetro. Vou tentar montar um exemplo.

A

Cara eu fiz um for e verifico se tem alguma das variáveis vindo como null ai eu set um valor string vazia setDsHorario("") e um valor para setNrDia((float) 0), claro que não é a forma correta, “gambia”, o que não é o correto. Mas infelizmente o tempo vence então não pesquisei muito.
Mas mesmo assim eu gostaria de ver o seu código, talvez eu implemente ele ao invés do meu no projeto depois, se puder add o fonte ai eu ficaria agradecido e o pessoal do fórum ai também.
Flw!

E
package guj;

public class InfoCliente {
    public String getNome() { return nome; }
    public Integer getId() { return id; }
    public void setNome (String nome_) { nome = nome_; }
    public void setId (Integer id_) { id = id_; }
    public InfoCliente (String nome_, Integer id_) { nome = nome_; id = id_; }
    private String nome;
    private Integer id;
    public String toString() { return "(" + nome + "," + id + ")"; }
}
~package guj;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.comparators.ComparatorChain;

public class ExemploComparatorChain {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ComparatorChain cc = new ComparatorChain();
        cc.addComparator(new BeanComparator("nome", new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                // null vem antes de tudo
                if (o1 == null && o2 == null)
                    return 0;
                if (o1 == null && o2 != null)
                    return -1;
                if (o1 != null && o2 == null)
                    return +1;
                return o1.compareTo(o2);
            }
        }));
        cc.addComparator(new BeanComparator("id"));
        List<InfoCliente> clientes = new ArrayList<InfoCliente>();
        // clientes.add (new InfoCliente (null, 100));
        clientes.add(new InfoCliente("Jose", 200));
        clientes.add(new InfoCliente("Aparecida", 300));
        clientes.add(new InfoCliente(null, 400));
        Collections.sort(clientes, cc);
        System.out.println(clientes);
    }

}
A
Cara muito bom este seu exemplo ai velho!

E pode apostar que irrei colocar um parte da assinatura do código este link do guj.

Muito bom mesmo.

Eu tinha olhado um exemplo que o cara colocava assim

Comparator com = new BeanComparator(new NullComparator());

e add o compartor no camparatorChain;

Mas este seu exemplo, concerteza terá sua assinatura no código, testei aqui e deu certo!!

VLW!!
Criado 7 de dezembro de 2011
Ultima resposta 8 de dez. de 2011
Respostas 4
Participantes 2