Autor Tema: Tratamientos de agregados basados en librería Guava  (Leído 4514 veces)

manuel_coronil

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 9
    • Ver Perfil
Tratamientos de agregados basados en librería Guava
« en: 15 de Junio 2014, 19:40 »
Saludos, me piden implementar una serie de métodos utilizando las clases Iterables, Iterables2, factorías de colecciones y todo lo relacionado con tratamiento de agregados con guava. En este caso me piden implementar dichos método pudiendo utilizar un sólo bucle.

public static Map<TipoSO,Double> tamañoPorTipoSO(Set<EmpresaDesarrolladoraIterable> sDes){
     
   Dado el conjunto sDes, devuelve un Map en el que las claves son el tipo de sistema operativo, y los valores son la suma de los tamaños de las aplicaciones de ese sistema operativo.
   La cuestión es que el tipo de sistema operativo y el tamaño de las apps son propiedades básicas del tipo App, no de EmpresaDesarrolladoraIterable, aunque ésta sea un subtipo de Iterable<App> y de EmpresaDesarrolladora.


   Dejo el código de cómo empezaría y a partir del bucle for(Solo puedo utilizar un solo bucle) es dónde estoy liado ya que no se como inicializar la clave y los valores del Map<K,V>.

   public static Map<TipoSO,Double> tamañoPorTipoSO(Set<EmpresaDesarrolladoraIterable> sDes){
            Preconditions.checkNotNull(sDes);
      
      Map<TipoSO,Double> tamañoPorTipoSO = Maps.newHashMap();
      for(EmpresaDesarrolladoraIterable emp : sDes){
         ...........................................
                        ...........................................
      }
      return tamañoPorTipoSO;
   }
   



     
« Última modificación: 15 de Junio 2014, 19:49 por manuel_coronil »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:Tratamientos de agregados basados en librería Guava
« Respuesta #1 en: 15 de Junio 2014, 22:42 »
Estás recibiendo un conjunto de objetos de tipo EmpresaDesarrolladoraIterable, y a partir de esos elementos tienes que crear un map (o al menos eso es lo que he entendido).

Lo primero que tendrás es que consultar la clase EmpresaDesarrolladoraIterable para saber a través de qué métodos puedes extraer la información que necesitas: tipo de sistema operativo y tamaño de las apps. Aunque a primera vista no parece muy lógico que dentro de una EmpresaDesarrolladora figure directamente el sistema operativo y tamaño de las apps, más bien sería de esperar que dentro de EmpresaDesarrolladora hubiera algo así como una colección de computadoras y cada computadora tuviera como atributos sistema operativo y apps.


manuel_coronil

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 9
    • Ver Perfil
Re:Tratamientos de agregados basados en librería Guava
« Respuesta #2 en: 15 de Junio 2014, 23:56 »
Claro lo que supones es cierto, la EmpresaDesarrolladora no contiene los métodos del TipoSO y el Tamaño. Por otro lado, el tipo EmpresaDesarrolladora contiene la propiedad  la propiedad Apps: de tipo List<App>,consultable. Representa las apps desarrolladas por la empresa.
Ahora viene mi pregunta de nuevo, ¿ Cómo devuelvo el Map<TipoSO,Double> con el tipoSO y el tamaño respectivamente, usando sólo un solo bucle?
Muchas gracias :)

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:Tratamientos de agregados basados en librería Guava
« Respuesta #3 en: 16 de Junio 2014, 11:15 »
Al mismo tiempo que recorres los objetos sDes tendrás que extraer de ellos la información que te hace falta y meterla en el map. Algo similar a esto.

      for(EmpresaDesarrolladoraIterable emp : sDes){

elTipoSoEnElObjeto = sDes.obtenerTipoSO(); //Obtener info del SO
double sumaTamañoAppsEnObjeto = 0;
  //Extraer información de cada objeto sDes
    for(App objetoAppExtraido : sDes){
     sumaTamañoAppsEnObjeto = sumaTamañoAppsEnObjeto + objetoAppExtraido.getTamaño();
}

//Meter la información en el map y pasamos al siguiente objeto
tamañoPorTipoSO.add(  elTipoSoEnElObjeto , sumaTamañoAppsEnObjeto )

      }

manuel_coronil

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 9
    • Ver Perfil
Re:Tratamientos de agregados basados en librería Guava
« Respuesta #4 en: 16 de Junio 2014, 12:19 »
Claro ese era mi planteamiento inicial, es más siempre he ido en ese camino. Pero lo primero es que sólo puedo usar un solo bucle, es decir un solo for por ejemplo. Por otro lado  no puedo extraer el tipoSO en este caso del iterable sDes ( sDes.getTipoSO()).
Lo entiendo todo menos eso, ya que con bucles si lo consigo sacar pero no esta permitido en mi caso.
Muchas gracias.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".