Skip to content

Instantly share code, notes, and snippets.

@fern4lvarez
Created March 8, 2012 13:02
Show Gist options
  • Select an option

  • Save fern4lvarez/2000905 to your computer and use it in GitHub Desktop.

Select an option

Save fern4lvarez/2000905 to your computer and use it in GitHub Desktop.
Combinar listas de recomendadores
/**
* 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