Iterable para transmitir en Java

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.