Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: manuel_coronil 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;
}
-
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.
-
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 :)
-
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 )
}
-
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.