Created
March 8, 2012 13:02
-
-
Save fern4lvarez/2000905 to your computer and use it in GitHub Desktop.
Combinar listas de recomendadores
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * Método que combina las listas de los 3 recomendadores y devuelve la lista resultado | |
| * @param userId String identificador del usuario | |
| * @param listaRM lista del recomendador Mix | |
| * @param listaRG lista del recomendador Género/Género | |
| * @param listaRT lista del recomendador Temperamento/Temperamento | |
| * @return lista de las películas elegidas al tras la combinación de los tres recomendadores | |
| */ | |
| private List<PeliPuntuacion> combinaListas(String userId, | |
| List<PeliPuntuacion> listaRM, List<PeliPuntuacion> listaRG, | |
| List<PeliPuntuacion> listaRT) { | |
| Usuario u=BD.dameUsuario(userId); | |
| RepartoRecomendadores rr=new RepartoRecomendadores(); | |
| PesoRecomendadores pr=rr.getRepartoUsuario(u); | |
| //System.out.println("Mix="+pr.getPesoRecomendadorMix()+ " GG="+pr.getPesoRecomendadorGG() + " TT="+pr.getPesoRecomendadorTT()); | |
| //meto todo en una hashtable con las puntuaciones finales | |
| Hashtable<String, Double> tablaConjunta=new Hashtable<String, Double>(); | |
| meteEnHash(tablaConjunta,listaRM,pr.getPesoRecomendadorMix()); | |
| meteEnHash(tablaConjunta,listaRG,pr.getPesoRecomendadorGG()); | |
| meteEnHash(tablaConjunta,listaRT,pr.getPesoRecomendadorTT()); | |
| //devuelve el hash en modo lista | |
| return dameHashListado(tablaConjunta); | |
| } | |
| /** | |
| * Devuelve una lista de películas ordenadas a partir de una tabla Hash de pelis y puntuaciones | |
| * @param tablaConjunta tabla con películas y puntuaciones | |
| * @return lista resultante | |
| */ | |
| private List<PeliPuntuacion> dameHashListado( | |
| Hashtable<String, Double> tablaConjunta) { | |
| PeliPuntuacion listaFinal[] = new PeliPuntuacion[tablaConjunta.size()]; | |
| Enumeration<String> pelis=tablaConjunta.keys(); | |
| int i=0; | |
| while (pelis.hasMoreElements()){ | |
| String titulo=pelis.nextElement(); | |
| PeliPuntuacion peli=new PeliPuntuacion(titulo,tablaConjunta.get(titulo)); | |
| listaFinal[i]=peli; | |
| i++; | |
| } | |
| //ordeno las palículas | |
| List<PeliPuntuacion> names = Arrays.asList(listaFinal); | |
| Collections.sort(names); | |
| int numElegidas=5; | |
| if (names.size()<numElegidas) | |
| numElegidas=names.size(); | |
| names=names.subList(0, numElegidas); | |
| return names; | |
| } | |
| /** | |
| * Método para meter pelis en una tabla hash teniendo en cuenta el peso del recomendador escogido | |
| * @param tablaConjunta tabla donde se meten los datos | |
| * @param lista lista de pelis | |
| * @param pesoRecomendador peso de ese recomendador | |
| */ | |
| private void meteEnHash(Hashtable<String, Double> tablaConjunta, | |
| List<PeliPuntuacion> lista, double pesoRecomendador) { | |
| double puntuacion; | |
| for (PeliPuntuacion pp: lista){ | |
| puntuacion=pp.getPuntuacion()*pesoRecomendador; | |
| if (tablaConjunta.containsKey(pp.getTitulo())) | |
| puntuacion=puntuacion+tablaConjunta.get(pp.getTitulo()); | |
| tablaConjunta.put(pp.getTitulo(), puntuacion); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment