oi para acabar o meu programa de uma biblioteca só me falta um metodo e tava tentando encontar um algoritmo para isso mas não tou a conseguir…
o problema é o seguinte:
o que o metodo é suposto fazer é listar os o curso dos alunos que mais requesitam na biblioteca, e o meu problema é achar por exemplo os 5 que mais requisitam pois achar o que mais requisita é facil ora os 5…
para ficar um problema mais facil(dado que só preciso da maneira como calcular), imaginem que é uma lista de de 20 numeros e quero achar os 5 mais altos…
Bom, acho que se vc juntar umas coisas que já deve saber vc consegue… vamos por passos:
1-> calcule quanto cada aluno usou a biblioteca.
2-> ordene por este resultado.
3-> extraia os 5 primeiros…
E pronto.
T
tuga50PJ
pois isso eu cheguei lá mas como eu faço para ordenar??
B
BrunoCarloPJ
Ola,
Po, ae depende como vc esta guardando isto… se for array vc pode usar a classe utilitaria Arrays, se for um Collection, vc pode usar a classe Collections… mas se isto estiver vindo do banco… tem como fazer no banco
T
tuga50PJ
então é assim:
eu tenho os utentes num hashmap que podem ser alunos, docentes ou externos cada um com carateristicas diferentes, e o que eu queria era ordenar os alunos que mais obras requisitadas tivessem, por isso ia ficar tipo deste modo:
publicArrayList<String>listaCursos(){Utentex;ArrayList<String>lista=newArrayList();for(Iteratorit=utentes.values().iterator();it.hasNext();){item=(Utente)it.next();if(xinstanceofAluno)// se é do tipo alunointy=((Aluno)x).getRequisicoes().size());// quantas consultas fizeram(é um Arraylist)****agoraeraaordenaçãoedeacordocomaordenaçãopunhaoscursosnumarraylistefariaoreturndalistacomoscursos....
deve haver uma maneira mais simples tipo um sort ou assim mas não encontrei nada…
postem aí qualquer coisa
-TUGA-
B
BrunoCarloPJ
Ola,
Entao, a classe Collections tem o sort, mas para collections… vc pode fazer assim:
Collection<Utente> utentes = utentes.values();
utentes = java.util.Collections.sort(utentes, new Comparator<Utente>(){
public int compare(Utente u1, Utente u2){
if(u1.getRequisicoes().size() > u2.getRequisicoes().size()){
return 1;
}else if(u1.getRequisicoes().size() < u2.getRequisicoes().size()){
return -1;
}
return 0;
}
});
//aqui vc faz o iterator... e bla bla bla....
T
tuga50PJ
se entendi o seu codigo ele me devolve a comparação entre dois utentes só não é??o que eu procurava era que a collection ordenasse com base no size das requisições e daí extraia os primeiros…ou o seu codigo já põe os utente todos por ordem com base nas requisições e não apenas 2??me esclarece sff
Obrigado
-TUGA-
B
BrunoCarloPJ
Ola,
O meu codigo ordena o colleciton inteiro, no caso a criacao do Comparetor e a condicao para a ordenacao, que o metodo sort ira usar para ordenar… roda ele e faz um teste.
T
tuga50PJ
oi
ele esta-me a dar um erro no seu codigo…
“cannot find symbol - method sort(java.util.Collection<Utentes>), <anonymous java.util.Comparator<Utentes>>)”
-TUGA-
B
BrunoCarloPJ
Humm… e vero, esqueci que ele so aceita o List… olha a assinatura dele aqui, mas e um problema facil de resolver… so passar ele assim:
utentes = java.util.Collections.sort(new ArrayList<Utente>(utentes)...
E viva o Brasil… na final
T
tuga50PJ
oi
mesmo assim ainda tá dando erro…
“cannot find symbol - method sort(<anonymous java.util.ArrayList<Utentes>>)”
-TUGA_
B
BrunoCarloPJ
Po, posta o teu codigo ae.
Outra, vc está usando java 5 ou 1.4?
T
tuga50PJ
tou usando o 5.0
o codigo todo…isso é muita coisa…eu vou enviar para seu mail…
tou usando o bluej como programa…
-TUGA-
B
BrunoCarloPJ
Precisa postar o codigo todo não 8O só a parte que estamos discutindo…