Java - Duda con List<Map<Integer,Integer>>

 
Vista:

Duda con List<Map<Integer,Integer>>

Publicado por gt_int (2 intervenciones) el 11/03/2013 23:30:08
Que tal compañeros, estoy teniendo problemas con un List<Map<Integer,Integer>>, os explico, hice una consulta en Hibernate para conseguir averiguar de cada alumno la cantidad de asignaturas en las que estaba matriculado, aquí la consulta:


Query query = session.createSQLQuery("select e.alumno_id, sum(e.cantidadAsignaturas) from Expedientes e group by e.alumno_id");
query.setResultTransformer(AliasToEntityMapResultT ransformer.INSTANCE);
List<Map<Integer,Integer>> result = query.list();




La consulta os la puse para contaros mi problema desde 0, pero no es relevante para el problema. Con esa consulta obtengo un Map por cada alumno, como cada alumno tiene un Map, cada Map es añadido a un List. Entonces si hago lo siguiente:

List<Map<Integer,Integer>> listado = alumnoManager.getAlumnosAsignaturas();
for(Map<Integer,Integer> o : listado){
System.out.println(o.keySet()+"---"+o.values());
}


En Consola me devuelve:

[sum(e.cantidadAsignaturas), alumno_id]---[2, 1]
[sum(e.cantidadAsignaturas), alumno_id]---[2, 3]
[sum(e.cantidadAsignaturas), alumno_id]---[1, 4]


Yo lo que quiero conseguir es a partir del List<Map<Integer,Integer>> conseguir un solo Map<Integer,Integer> donde la clave sea el alumno_id y el valor la cantidad de asignaturas quedanto el Map así:
Clave --> Valor
1 --> 2
3 --> 2
4 --> 1


Pero no sé cómo hacer esa conversión, ¿alguien podría ayudarme u orientarme?.

De antemano daros las gracias, a ver si pudiérais ayudarme.

Un cordial saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Duda con List<Map<Integer,Integer>>

Publicado por Tom (1831 intervenciones) el 12/03/2013 12:49:11
Vas a conseguir sacar lo que hayas metido :)

1
2
3
4
5
6
7
List<Map<Integer,Integer>> listado = alumnoManager.getAlumnosAsignaturas();
for(Map<Integer,Integer> o : listado) {
  for(int i : o.keySet()) {
    System.printf("%d -> %d\n", i, o.get(i));
  }
  // System.out.println(o.keySet()+"---"+o.values());
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con List<Map<Integer,Integer>>

Publicado por gt_int (2 intervenciones) el 12/03/2013 16:15:18
Ya lo sé, pero ¿cómo conseguirías crear un Map<Integer,Integer> siendo la clave el e.alumno_id y el valor sum(e.cantidadAsignaturas)?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con List<Map<Integer,Integer>>

Publicado por Tom (1831 intervenciones) el 12/03/2013 21:12:29
Pues como por lo que has pegado no se puede saber si lo que está mal es el código o la traza,
suponiendo que lo que tengas en realidad sea algo parecido a:

List<Map<String[], Integer[]>> listado = ...

en este caso concreto podrías hacer algo así como:

1
2
3
4
Map<Integer, Integer> resultado = new Map<Integer, Integer>();
for(Map<String[], Integer[]> o : listado) {
  resultado.put(o.values().get(1), o.values().get(1));
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con List<Map<Integer,Integer>>

Publicado por Tom (1831 intervenciones) el 12/03/2013 21:42:15
Vale, mirando la documentación de AliasToEntityMapResultTransformer , seguramente lo que obtienes es:

List<Map<String, Object>> result = query.list();


con lo cual, y solo en el caso concreto que pones, podrías hacer:
1
2
3
4
Map<Integer, Integer> resultado = new Map<Integer, Integer>();
for(Map<String, Integer> o : listado) {
    resultado.put(o.get("alumno_id"), o.get("sum(e.cantidadAsignaturas)");
}


y, si acaso, hacer algún cast a Integer ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar