[RESOLVIDO] Ordenação de Nome

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:

[code] 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();
}[/code]

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

[quote=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:

[code] 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();
}[/code]

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
[/quote]

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.

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

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

Collections.sort(linhas);

[quote=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[/quote]

Porque Guilherme? :slight_smile:

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

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

[quote=long]nel, nao rolou como voce disse…
em relacao a fazer pelo dao… vou testar[/quote]

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.

[quote=nel][quote=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[/quote]

Porque Guilherme? :)[/quote]

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

[quote=guilherme.dio][quote=nel][quote=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[/quote]

Porque Guilherme? :)[/quote]

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[/quote]

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!

É 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

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

[quote=nel][quote=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[/quote]

Porque Guilherme? :)[/quote]Gostaria de saber também. Qual a vantagem dessa abordagem em relação a outra?

[quote=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.[/quote]
O certo não seria a interface Comparable?

[quote=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:

[code] 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();
}[/code]

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
[/quote]
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

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

[quote=guilherme.dio][quote=nel][quote=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[/quote]

Porque Guilherme? :)[/quote]

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[/quote]

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).