Java 26
Ejercicios de Java sobre Streams
4 ejercicios de Streams en Java. Piensa la respuesta antes de abrirla: la explicación dice por qué las demás opciones fallan.
1 · Elige la respuesta · nivel 2
¿Qué imprime este código?
Stream.of(1, 2, 3) .peek(n -> System.out.print(n + " ")) .filter(n -> n > 1) .findFirst();System.out.println();- A1 2
- B1 2 3
- C2
- DNada: falta una operación terminal
Ver la respuesta
Respuesta: A. 1 2
Los streams procesan los elementos de uno en uno y bajo demanda. findFirst() es terminal y se detiene en cuanto encuentra el 2, así que el 3 nunca pasa por peek().
2 · Completa el hueco · nivel 2
Completa para obtener una lista con los nombres en mayúsculas.
List<String> upper = names.stream() .___(String::toUpperCase) .___();- map
- toList
- filter
- forEach
- flatMap
- sorted
Ver la respuesta
Respuesta: map · toList
List<String> upper = names.stream() .map(String::toUpperCase) .toList();map() transforma cada elemento y toList(), disponible desde Java 16, recoge el resultado en una lista inmutable.
3 · Completa el hueco · nivel 2
Completa para unir los elementos entre corchetes y separados por comas.
String csv = Stream.of("a", "b", "c") .collect(Collectors.___(", ", "[", "]"));System.out.println(csv);- joining
- toList
- concat
- join
- reducing
- mapping
Ver la respuesta
Respuesta: joining
String csv = Stream.of("a", "b", "c") .collect(Collectors.joining(", ", "[", "]"));System.out.println(csv);Collectors.joining(separador, prefijo, sufijo) concatena los elementos de un stream de String. String.join solo acepta el separador y trabaja sobre colecciones, no dentro de collect.
4 · Ordena las líneas · nivel 2
Ordena el pipeline para quitar repetidos, ordenar y pasar a mayúsculas, en ese orden.
- .collect();
- .distinct()
- .map(String::toUpperCase)
- .sorted()
- .toList();
- List<String> names = List.of("eva", "ana", "luis", "ana");
- List<String> result = names.stream()
- System.out.println(result);
Ver la respuesta
El orden correcto:
List<String> names = List.of("eva", "ana", "luis", "ana");List<String> result = names.stream() .distinct() .sorted() .map(String::toUpperCase) .toList();System.out.println(result);Sobran: .collect();
Un pipeline encadena operaciones intermedias (distinct, sorted, map) y acaba en una terminal (toList). collect() necesita un Collector como argumento.