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…
Obrigado e postem aí qlq coisa
-TUGA-
Ola,
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.
pois isso eu cheguei lá mas como eu faço para ordenar??
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 
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:
public ArrayList<String> listaCursos(){
Utente x;
ArrayList<String> lista = newArrayList();
for(Iterator it = utentes.values().iterator(); it.hasNext();) {
item = (Utente) it.next();
if(x instanceof Aluno) // se é do tipo aluno
int y = ((Aluno)x).getRequisicoes().size());// quantas consultas fizeram(é um Arraylist)
****agora era a ordenaçãoe de acordo com a ordenação
punha os cursos num arraylist e faria o return da lista com os cursos....
deve haver uma maneira mais simples tipo um sort ou assim mas não encontrei nada…
postem aí qualquer coisa
-TUGA-
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....
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-
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.
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-
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
oi
mesmo assim ainda tá dando erro…
“cannot find symbol - method sort(<anonymous java.util.ArrayList<Utentes>>)”
-TUGA_
Po, posta o teu codigo ae.
Outra, vc está usando java 5 ou 1.4?
tou usando o 5.0
o codigo todo…isso é muita coisa…eu vou enviar para seu mail…
tou usando o bluej como programa…
-TUGA-
Precisa postar o codigo todo não 8O só a parte que estamos discutindo…
public ArrayList<String> listaCursoMaisR(){
Collection<Utentes> utent = utente.values();
utent = java.util.Collections.sort(new ArrayList<Utentes> (utent){
public int compare(Utentes u1, Utentes u2){
if(u1.getObras_ja_requisitadas().size() > u2.getObras_ja_requisitadas().size()){
return 1;
} else
if(u1.getObras_ja_requisitadas().size() < u2.getObras_ja_requisitadas().size()){
return -1;
}
return 0;
}
});
}
m<ndei o projecto na mesma para o mail…
-TUGA-
Ola,
Pô, acho que não espliquei direito… olha só agora:[code]
import java.util.*:
…
public List listaCursoMaisR(){
List utent = new ArrayList(utente.values());
utent = Collections.sort(utent, new COmparator(){
public int compare(Utentes u1, Utentes u2){
if(u1.getObras_ja_requisitadas().size() > u2.getObras_ja_requisitadas().size()){
return 1;
} else
if(u1.getObras_ja_requisitadas().size() < u2.getObras_ja_requisitadas().size()){
return -1;
}
return 0;
}
}); [/code]
Ve agora…
mesmo assim ainda tá dando erro…
“incompatible types, found void but expected java.lang.list<Utentes>”
na linha
"utent = Collections.sort(utent, new Comparator<Utente>(){ "
-TUGA-
Ola,
Esqueci que o sort de Collections não tem retorno…
só vc tirar o "utent = " e deixar "Collections.sort(utent, new Comparator<Utente>(){ ".