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 16 de Junio 2014, 19:13

Título: Metodo mediante libreria Guava sin utilizar ningún bucle java
Publicado por: manuel_coronil en 16 de Junio 2014, 19:13
Me piden implementar un método estático de la forma sin utilizar ningún bucle : El método agrega todas las apps gratis del array apps al conjunto de descargas del usuario u.

public static void descargaAppsGratis(Usuario u, App[] apps){




Por un lado tengo el método getAppsInstaladas().De tipo Set<App> que indica las aplicaciones que el usuario ha descargado e instalado en su plataforma.
Y por otro lado tengo el método getEsGratis().De tipo Boolean ya implementado en el tipo App.

¿Cómo quedaría el método estático anterior? Gracias
Título: Re:Metodo mediante libreria Guava
Publicado por: Ogramar en 16 de Junio 2014, 20:42
Para recorrer una colección lo más habitual es usar un bucle, bien sea un while, un for tradicional o un for each. Por ejemplo si te dicen: dada una lista de 10 números, ¿cuántos de esos números tienen valor 7?

Normalmente se usará un bucle para recorrer los diez números para comprobar cuántos sietes hay.

Otra cosa es si en el api que estás usando existe un método predefinido que te permite obtener el número de veces que aparece un bucle invocando un método.

Por ejemplo: Coleccion.getNumeroApariciones(nombreArrayList, 7) te podría devolver el número de veces que aparece 7 en el ArrayList que pases como parámetro. De esta forma no estás utilizando ningún bucle (en realidad sí lo estás usando, pero digamos que en segundo plano porque es la clase y método que estás invocando quien implementa la operación).

Finalmente, podrías implementar un procedimiento recursivo para recorrer la colección. Esto quizás puedas considerar que formalmente no es un bucle (ya que no utilizarías for, while ni nada parecido).

Título: Re:Metodo mediante libreria Guava
Publicado por: manuel_coronil en 17 de Junio 2014, 16:02
Lo siento, pero sigo sin entenderlo. Por mucho que le siga dando vueltas no consigo añadir las apps gratis del array al conjunto de descargas del usuario u. He convertido el array de apps a una lista mediante el método asList() para así conseguir que dicho array se haga iterable.
Despues construyo un Predicate para filtrar dicha lista iterable para descartar todas las apps que no son gratis. Y a partir de aquí no se seguir para añadir las apps gratis del iterable al usuario u.

public static void descargaAppsGratis(Usuario u, App[] apps){

        App[] array = new App[apps.length];
   List<App> lista = new ArrayList<App>();
        lista = Arrays.asList(array);
      
   Iterable<App> itApp = Iterables.filter(lista, new PredicadoAppGratis());
        ...............................................
        ...............................................
Título: Re:Metodo mediante libreria Guava
Publicado por: Ogramar en 17 de Junio 2014, 17:55
Quizás la idea del recorrido recursivo te sirva. Si tienes la lista de Apps y tienes que comprobar cuántas Apps cumplen una determinada condición (por ejemplo que el atributo esDePago == false) la idea sería recorrer recursivamente la colección.

Aquí he creado un ejemplo de recorrido recursivo:

https://www.aprenderaprogramar.com/foros/index.php?topic=962.0

Espero te sirva