Serie 0x6 - Restricciones sobre Programación Funcional¶
0x6000 - No usar expresiones lambda ni referencias a métodos¶
Explicación¶
Las expresiones lambda (->) y las referencias a métodos (::) no están permitidas en esta materia. Esta restricción te obliga a internalizar la sintaxis y el control de flujo explícito de Java.
Incorrecto ❌:
lista.forEach(elemento -> System.out.println(elemento));
nombres.stream().map(String::toUpperCase).collect(Collectors.toList());Correcto ✅:
for (String elemento : lista) {
System.out.println(elemento);
}
List<String> nombresMayusculas = new ArrayList<>();
for (String nombre : nombres) {
nombresMayusculas.add(nombre.toUpperCase());
}importan - Unknown Directive
importan - Unknown DirectiveEsta regla no aplica a los tests, ya que `assertThrows` es sumamente mas compacta y expresiva.
0x6001 - No usar la API de Streams ni Collectors¶
Explicación¶
La API java.util.stream y sus operaciones de reducción (Collectors, .sum(), etc.) abstraen los bucles. En esta etapa, es necesario usar bucles explícitos (for, while, for-each) para manejar el estado de las variables y comprender algorítmicamente las transformaciones de datos.
Incorrecto ❌:
int suma = numeros.stream()
.filter(n -> n % 2 == 0)
.mapToInt(Integer::intValue)
.sum();Correcto ✅:
int suma = 0;
for (Integer numero : numeros) {
if (numero % 2 == 0) {
suma = suma + numero;
}
}0x6002 - No usar métodos funcionales de colecciones ni encadenamiento¶
Explicación¶
Se agrupan aquí restricciones sobre métodos funcionales preexistentes en las colecciones de Java, tales como forEach(), removeIf(), replaceAll(), y el patrón de composición funcional o encadenamiento. Se deben usar iteradores explícitos o bucles tradicionales. Esto asegura la comprensión de cómo y en qué momento muta el estado.
Incorrecto ❌:
nombres.removeIf(n -> n.startsWith("A"));Correcto ✅:
Iterator<String> it = nombres.iterator();
while (it.hasNext()) {
if (it.next().startsWith("A")) {
it.remove();
}
}