[RESOLVIDO] Ordenação de Nome

16 respostas
long
Ola tenho um List em um jTable que queria ordenar por ordem alfabetica mas algo está errado
public void ordenarNome(){
        Collections.sort(linhas, new Comparator() { // aqui ele acusa um erro
            public int compare(Produto o1, Produto o2){
                return o1.getNome().compareTo(o2.getNome());
        }
             });
             fireTableDataChanged();
    }

o possivel concerto para o erro que o netbeans proproe é implementar todos os métodos abstratos
logo fica assim:

public void ordenarNome(){
        Collections.sort(linhas, new Comparator() {
            public int compare(Produto o1, Produto o2){
                return o1.getNome().compareTo(o2.getNome());
        }

            public int compare(Object o1, Object o2) {
                throw new UnsupportedOperationException("Not supported yet.");
            }
             });
             fireTableDataChanged();
    }

Com isso ele aparentemente acaba com o erro, mas quando vou ordenar a tabela.. ele da um erro justamento nesse UnsupportedOperationException
O que poderia esta errado?
se for preciso, posto o erro que da no UnsupportedOperationException

16 Respostas

nel
long:
Ola tenho um List em um jTable que queria ordenar por ordem alfabetica mas algo está errado
public void ordenarNome(){
        Collections.sort(linhas, new Comparator() { // aqui ele acusa um erro
            public int compare(Produto o1, Produto o2){
                return o1.getNome().compareTo(o2.getNome());
        }
             });
             fireTableDataChanged();
    }

o possivel concerto para o erro que o netbeans proproe é implementar todos os métodos abstratos
logo fica assim:

public void ordenarNome(){
        Collections.sort(linhas, new Comparator() {
            public int compare(Produto o1, Produto o2){
                return o1.getNome().compareTo(o2.getNome());
        }

            public int compare(Object o1, Object o2) {
                throw new UnsupportedOperationException("Not supported yet.");
            }
             });
             fireTableDataChanged();
    }

Com isso ele aparentemente acaba com o erro, mas quando vou ordenar a tabela.. ele da um erro justamento nesse UnsupportedOperationException
O que poderia esta errado?
se for preciso, posto o erro que da no UnsupportedOperationException

Long, o que está inventando?
A sua classe Produto deve implementar o Comparator e posteriormente, você simplesmente faz:

public void ordenarNome(){
        Collections.sort(linhas, new Comparator<Produto>());
        fireTableDataChanged();
}

Antes, estava criando uma classe anonima.
Abraços.

guilherme.dio

Não acha melhor vc fazer essa ordenação direto pelo DAO?

SELECT * FROM produto ORDER BY nome;

melhor utilizar o máximo possível os recursos de SQL

R

E se na sua classe voce implementasse o metodo compare e depois isso:

Collections.sort(linhas);
nel

guilherme.dio:
Não acha melhor vc fazer essa ordenação direto pelo DAO?

SELECT * FROM produto ORDER BY nome;

melhor utilizar o máximo possível os recursos de SQL

Porque Guilherme? :slight_smile:

long

nel, nao rolou como voce disse…
em relacao a fazer pelo dao… vou testar

long

aeee =D
funcinou! vlw wellington
e a todos que ajudaram ^^

nel

long:
nel, nao rolou como voce disse…
em relacao a fazer pelo dao… vou testar

Fiz a correção, dei new Produto() ao invés de new Comparator().
A vantagem, no meu ponto de vista, de se fazer isso é que sempre que precisar ordernar a lista por nomes você já tem o comparator pronto e é só usa-lo.
E se está resolvido, adicione [Resolvido] ao fim do seu tópico.

Abraços.

guilherme.dio

nel:
guilherme.dio:
Não acha melhor vc fazer essa ordenação direto pelo DAO?

SELECT * FROM produto ORDER BY nome;

melhor utilizar o máximo possível os recursos de SQL

Porque Guilherme? :)

Eu tenho esse raciocínio, prefiro utilizar o máximo possível os processos detnro do próprio BD, para evitar lentidão em minha aplicação

nel

guilherme.dio:
nel:
guilherme.dio:
Não acha melhor vc fazer essa ordenação direto pelo DAO?

SELECT * FROM produto ORDER BY nome;

melhor utilizar o máximo possível os recursos de SQL

Porque Guilherme? :)

Eu tenho esse raciocínio, prefiro utilizar o máximo possível os processos detnro do próprio BD, para evitar lentidão em minha aplicação

Guilherme, creio que não seja uma verdade absoluta. Depende muito do banco que vai utilizar, o que vai ser executado nele, como foi implementado, assim como você está utilizando a linguagem, se está usando ela da maneira mais produtiva, buscando perfomance e etc.

Eu nunca testei qual é o mais rápido, mas creio que para esse caso em particular, seja até irrelevante a diferença.
Abraços!

guilherme.dio

É realmente, é algo que deve ser análisado e estudado para aplicar de modo a se encaixar no conceito de sua aplicação.

Más como vi que o ‘long’ queria somente ordenar, nada mais rápido e fácil do que simplesmente utilizar o ORDER BY

long

a verdade é que cada um tem o seu modo de ver e de programar x)
já haviam me falado para eu usar o order by mas havia tempo e acabei esquecendo =P
posso testar uma hr qualquer desta maneira e dpois tentar comparar com o a maneira que o nel e o wellington disseram e ver quais suas vantagens e desvantagens
dinvo vlw pela ajuda pessoal

WellingtonRamos

nel:
guilherme.dio:
Não acha melhor vc fazer essa ordenação direto pelo DAO?

SELECT * FROM produto ORDER BY nome;

melhor utilizar o máximo possível os recursos de SQL

Porque Guilherme? :)

Gostaria de saber também. Qual a vantagem dessa abordagem em relação a outra?

WellingtonRamos

nel:
Long, o que está inventando?
A sua classe Produto deve implementar o Comparator e posteriormente, você simplesmente faz:
Antes, estava criando uma classe anonima.
Abraços.

O certo não seria a interface Comparable?

WellingtonRamos
long:
Ola tenho um List em um jTable que queria ordenar por ordem alfabetica mas algo está errado
public void ordenarNome(){
        Collections.sort(linhas, new Comparator() { // aqui ele acusa um erro
            public int compare(Produto o1, Produto o2){
                return o1.getNome().compareTo(o2.getNome());
        }
             });
             fireTableDataChanged();
    }

o possivel concerto para o erro que o netbeans proproe é implementar todos os métodos abstratos
logo fica assim:

public void ordenarNome(){
        Collections.sort(linhas, new Comparator() {
            public int compare(Produto o1, Produto o2){
                return o1.getNome().compareTo(o2.getNome());
        }

            public int compare(Object o1, Object o2) {
                throw new UnsupportedOperationException("Not supported yet.");
            }
             });
             fireTableDataChanged();
    }
Com isso ele aparentemente acaba com o erro, mas quando vou ordenar a tabela.. ele da um erro justamento nesse UnsupportedOperationException O que poderia esta errado? se for preciso, posto o erro que da no UnsupportedOperationException
O erro é de generics. Deveria estar escrito new Comparator
public void ordenarNome(){
        Collections.sort(linhas, new Comparator<Produto>() {
            public int compare(Produto o1, Produto o2){
                return o1.getNome().compareTo(o2.getNome());
        }
             });
             fireTableDataChanged();
    }
Se mantiver o código anterior do jeito que estava, a implementação correta seria essa:
public void ordenarNome(){
        Collections.sort(linhas, new Comparator() {
            public int compare(Object o1, Object o2){
                return ((Produto)o1.getNome()).compareTo(((Produto)o2.getNome()));
        }
             });
             fireTableDataChanged();
    }
O erro ocorre porque o Java não é capaz de identificar, em tempo de execução, quais dos métodos que ele deve usar pq Produto É um Object
WellingtonRamos

long:
aeee =D
funcinou! vlw wellington
e a todos que ajudaram ^^
:thumbup:

WellingtonRamos

guilherme.dio:
nel:
guilherme.dio:
Não acha melhor vc fazer essa ordenação direto pelo DAO?

SELECT * FROM produto ORDER BY nome;

melhor utilizar o máximo possível os recursos de SQL

Porque Guilherme? :)

Eu tenho esse raciocínio, prefiro utilizar o máximo possível os processos detnro do próprio BD, para evitar lentidão em minha aplicação

Se é só esse motivo, ou você tem um ótimo servidor com o SGBD instalado ou tem apenas uma aplicação :wink:

Brincadeiras a parte, o ponto é que, pode ser uma lista que será ordenada por n formas, uma inicial (que pode vir definida da consulta) e depois, pode ser reordenada (muitas tabelas tem esse tipo de comportamento).

Acontece que, muitas vezes, não vale a pena uma nova consulta só pra ter uma nova ordenação quando, já tendo os dados, os mesmos possam ser reordenados.

Outra coisa é que, caso seja um único SGBD para n aplicações distintas E as aplicações estejam residindo outros servidores, pode ser que isso sobrecarregue o servidor do SGBD. Logo, sua aplicação será rápida mas a latencia do SGBD acabará por dar a falsa impressão de que a mesma é, na verdade, lenta.

Não estou dizendo que sua visão está errada, mas sim, que é algo a ser estudado conforme cada projeto, olhando também para a arquitetura disponibilizada (ou mesmo regras impostas arbitrariamente).

Criado 29 de junho de 2011
Ultima resposta 29 de jun. de 2011
Respostas 16
Participantes 5