- Conocer qué son y cómo funcionan las High Order Functions.
- Crear una High Order Functions.
- Crear una clase con un método que reciba una lista de enteros y les aplique una función arbitraria.
- Apache Maven 3.8.4 o superior
- JDK (o OpenJDK)
Para ejecutar las pruebas de maven usa:
mvn test
-
Clase contenedora
-
Crea la clase Ejemplo2 en el paquete
org.bedu.jse2.demo.ejemplos
-
Agrega el siguiente bloque de código
List<Integer> transformar(Iterable<Integer> conjunto, Function<Integer, Integer> funcion){ return null; }
-
-
Prueba unitaria
-
Crea una prueba para la clase Ejemplo2
-
Agrega el siguiente código
import static org.assertj.core.api.Assertions.assertThat; class Ejemplo2Test { private final List<Integer> CONJUNTO = Arrays.asList(1, 4, 6, 2, -5, 9); @Test @DisplayName("Negativos") void negatives() { Ejemplo2 ejemplo2 = new Ejemplo2(); List<Integer> real = ejemplo2.transformar(CONJUNTO, s -> -s); assertThat(real).containsExactly(-1, -4, -6, -2, 5, -9); } @Test @DisplayName("Cuadrados") void squares() { Ejemplo2 ejemplo2 = new Ejemplo2(); List<Integer> real = ejemplo2.transformar(CONJUNTO, s -> s * s); assertThat(real).containsExactly(1, 16, 36, 4, 25, 81); } }
-
Si ejecutas la prueba en este momento fallará ya que estamos regresando null.
Esta prueba intenta aplicar dos funciones distintas al mismo método, y espera tener resultados acordes a la función dada.
-
-
Implementando la funcionalidad
-
Reemplaza el código de la clase Ejemplo2 de la siguiente manera
List<Integer> transformar(Iterable<Integer> conjunto, Function<Integer, Integer> funcion){ List<Integer> nuevaLista = new ArrayList<>(); for(Integer value : conjunto){ nuevaLista.add(funcion.apply(value)); } return nuevaLista; }
-
Vuelve a ejecutar la prueba
En este ejemplo creamos un operador capaz de recibir una función arbitraria y aplicarla sobre un conjunto de enteros.
-
Siguiente (Reto 2)