0% encontró este documento útil (0 votos)
7 vistas7 páginas

Spring - Java Streams

Los streams son envoltorios de colecciones de datos que permiten operar sobre ellas de manera eficiente y declarativa, sin almacenar datos ni modificar la fuente subyacente. Facilitan el procesamiento masivo de datos mediante operaciones intermedias y terminales, utilizando un enfoque funcional. A través de ejemplos, se muestra cómo los streams simplifican tareas como filtrar elementos en comparación con los bucles tradicionales.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas7 páginas

Spring - Java Streams

Los streams son envoltorios de colecciones de datos que permiten operar sobre ellas de manera eficiente y declarativa, sin almacenar datos ni modificar la fuente subyacente. Facilitan el procesamiento masivo de datos mediante operaciones intermedias y terminales, utilizando un enfoque funcional. A través de ejemplos, se muestra cómo los streams simplifican tareas como filtrar elementos en comparación con los bucles tradicionales.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 7

Streams

En este artículo vamos a tratar básicamente qué son los streams y qué nos permitenhacer.
Además veremos un pequeño ejemplo de la diferencia que hay entre una operación con un
loop normal y una hecha utilizando Streams.

¿QUÉ SON LOS STREAMS?


Podríamos decir que los Streams son "envoltorios" de colecciones de datos que nos
permiten operar con estas colecciones y hacer que el procesamiento masivo de datos sea
rápido y fácil de leer. Algo importante a tener en cuenta es que los Streams no almacenan
datos y no son una estructura de datos en sí. Tampoco modifican la fuente de datos
subyacente. Solo realizan operaciones simples o concatenadas sobre ellos.

¿QUÉ NOS PERMITEN HACER?


Generalmente cuando trabajamos con colecciones filtramos, calculamos y realizamos
muchos tipos de operaciones sobre los datos. Los Streams nos permitena través del
paradigma funcional abstraernos del cómo programar esas operacionesy sólo centrarnos
en que resultado se espera y escribirlo de una manera muy declarativa.

Java Stream y su comportamiento


Esta es parte difícil de entender del concepto de Stream. Los Streams diseñan unflujo de
trabajo que se ejecuta de forma unitaria item a item.

VEAMOS UN EJEMPLO
Teniendo una lista con N cantidad de números, vamos a realizar una operación para
quedarnos sólo con los números que sean menores a X valor.

Ejemplo con un ciclo For:

List<Long> listitaFor = new LinkedList();


for (int i = 0; i < lista.size(); i++) {
Long valorActual = lista.get(i); if
(valorActual < valorMaximo){
listitaFor.add(valorActual);
}
}

En este caso, el for itera la lista y tenemos que aclararle que, valor por valor, los
compare con el valor máximo y que en el caso de que sea menor lo agregue a lalista de
salida.
Ejemplo con Streams:

List<Long> listitaStream = lista.stream().filter(valor -> valor < valorMaximo)


.collect(Collectors.toList());

En este caso, a una lista le asignamos el return de un Stream al cual sólo le aclaramos
que tiene que realizar un filtro a través de una función lambda y que lotiene que
recolectar en una lista.

Hay muchas operaciones útiles que se pueden realizar con Streams.Estas se


dividen en:
Operaciones intermedias: Son operaciones las cuales retornan otro Stream
(Stream <T>) y permite concatenar las diferentes operaciones.
Operaciones de terminal: devuelven un resultado de tipo definido.

A modo de conclusión, podemos decir que los Streams facilitan mucho trabajar con
grandes cantidades de datos de forma muy prolija a la hora de escribirlo en el código.
Más allá de eso, también tiene beneficios y contras en cuanto a rendimientoy eso es algo
que estaremos tratando en algún próximo post.

Métodos stream
Es una interfaz que nos provee clases para procesar datos de manera funcional como flujode
datos, No es otra colección.
También nos provee de una serie de métodos de orden superior (funciones que reciben unao más
funciones y retornan otra función o un objeto).
Estas funciones nos ayudan a transformar, filtrar y reducir una colección dada.

La excepción RuntimeException es la super clase encargada de lanzar un erroren


tiempo de ejecución de nuestra aplicación.
La excepción IllegalStateException se encargará de lanzar un error cuando tratamosde
acceder a un objeto en un momento inapropiado, puede ser por uso o por otras causas.
Un Stream debe operarse (invocando una operación de secuencia intermedia oterminal)
solo una vez
La interfaz BaseStream provee un flujo de objetos que permite el procesamientoparalelo
y secuencial de dicho flujo.
La interfaz Stream provee los métodos necesarios para hacer operaciones, aunquesuele
ser confundida con una colección sabemos que tienen objetivos muy diferentes, las
colecciones proporcionan una manera eficaz de acceso y modificación de datos y los
flujos de operaciones.

boolean allMatch(Predicate <? Devuelve true si todos los


superT>predicate) elementos coinciden con
el predicado
proporcionado.

boolean anyMatch(Predicate <? Devuelve true si algún


superT>predicate) elemento coincide con el
predicado proporcionado.

<R A>R collect(Collector<? super Realiza una operación de


T,A,R> collector) reducción en los
elementos usando un
Collector.

long count() Devuelve el recuento de


elementos.

Stream<T> distinct() Devuelve un flujo que


consta de los distintos
elementos

(Object.equals(Object))

static <T> Stream<T> empty() Devuelve true si esta


vacío el flujo.
Stream<T> filter(Predicate<? super Devuelve un flujo que
T> predicate) consta de los elementos
que coinciden con el
predicado
dado.

void forEach(Consumer<? Realiza una acción para


super T> action) cada elemento de este
flujo

<R> Stream<R> map(Function<? super Devuelve un flujo que


T,? extends R> mapper) consta de los resultados
de aplicar la función dada
a los
elemento.

static <T> Stream<T> of(T... values) Devuelve un flujo


ordenada secuencial
cuyos elementos son los
valores
especificados.

T reduce(T identity, Realiza una reducción en


BinaryOperator<T> los elementos, utilizando
accumulator) el valor de identidad
proporcionado y una
función de acumulación
asociativa , y devuelve el
valor
reducido.

Function
Es una función que toma los parámetros, los procesa o los opera.
Ejemplo Tradicional: a cada elemento de la colección se le multiplica por dos y seagrega a
una nueva colección.
Predicate
Es una función que toma los parámetros y evalúa si cumple con la condición indicada. Ejemplo
Tradicional: se evalúa cada elemento de la colección y si es par se agrega a unanueva colección.

Consumer
Es una función que toma los argumentos y no retorna nada, simplemente procesa.Ejemplo
Tradicional: se envía cada elemento como argumento al método System.out.println().

✔ Las colecciones poseen el método stream() que retorna el un flujo con el


contenido de la colección.
✔ En Java 8 las Function, Predicate y Consumer se realizarán con expresiones
Lambdas.

• ((Parametros) -> Function)


• ((Parametros) -> Predicate)
• ((Parametros) -> Consumer)

Adicionalmente debemos tener en cuenta que no podemos realizar mas de unaoperación a


la vez ya que lanzaría una excepción de tipo IllegalStateException.

✔ Los métodos filter(), map() son operaciones intermedias.


✔ Los métodos count() y sum() son operaciones de terminal.

forEach
Es un método que se usa para recorrer cada uno de los elementos y espera comoargumento
un Consumer, los Stream y Colecciones
poseen este método de recorrido.

Map
Es un método que se usa para transformar un objeto en otro aplicando una función y
retorna un nuevo flujo.

Filter
Este método filtra elementos en función de un predicado que se haya enviado.

Reduce
Este método recibe una función de acumulación y retorna un solo valor

También podría gustarte