1. Información general
En este breve tutorial, convertiremos un objeto iterable de Java en una secuencia y realizaremos algunas operaciones estándar en él.
2. Conversión de Iterable a Stream
La interfaz Iterable está diseñada teniendo en cuenta la generalidad y no proporciona ningún método stream () por sí solo.
En pocas palabras, puede pasarlo al método StreamSupport.stream () y obtener un Stream de la instancia Iterable dada .
Consideremos nuestra instancia Iterable :
Iterable iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream");
Y así es como podemos convertir esta instancia Iterable en una secuencia:
StreamSupport.stream(iterable.spliterator(), false);
Tenga en cuenta que el segundo parámetro en StreamSupport.stream () determina si el Stream resultante debe ser paralelo o secuencial. Debería configurarlo como verdadero, para un Stream paralelo .
Ahora probemos nuestra implementación:
@Test public void givenIterable_whenConvertedToStream_thenNotNull() { Iterable iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream"); Assert.assertNotNull(StreamSupport.stream(iterable.spliterator(), false)); }
Además, una nota al margen rápida: las transmisiones no son reutilizables, mientras que Iterable sí lo es; también proporciona un método spliterator () , que devuelve una instancia de java.lang.Spliterator sobre los elementos descritos por el Iterable dado .
3. Realización de la operación de flujo
Realicemos una operación de flujo simple:
@Test public void whenConvertedToList_thenCorrect() { Iterable iterable = Arrays.asList("Testing", "Iterable", "conversion", "to", "Stream"); List result = StreamSupport.stream(iterable.spliterator(), false) .map(String::toUpperCase) .collect(Collectors.toList()); assertThat( result, contains("TESTING", "ITERABLE", "CONVERSION", "TO", "STREAM")); }
4. Conclusión
Este sencillo tutorial muestra cómo puede convertir una instancia iterable en una instancia de Stream y realizar operaciones estándar en ella, tal como lo hubiera hecho para cualquier otra instancia de Collection .
La implementación de todos los fragmentos de código se puede encontrar en el proyecto Github.