Programación

1º DAM/DAW - Curso 2024-2025

User Tools

Site Tools


apuntes:streams

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
apuntes:streams [2021/10/22 06:31] Santiago Faciapuntes:streams [2023/05/28 12:02] (current) – [Operaciones finales] Santiago Faci
Line 8: Line 8:
 ===== Cómo crear Streams ===== ===== Cómo crear Streams =====
  
-Los \emph{streamsse pueden generar llamando al método \verb stream()  de cualquiera de las implementaciones de la interfaz  +Los ''streams'' se pueden generar llamando al método ''stream()''  de cualquiera de las implementaciones de la interfaz ''java.util.Collection''.
-\verb java.util.Collection  .+
  
-\begin{lstlisting}[language=java]+<code java>
 List<Animal> listaAnimales = new ArrrayList<>(); List<Animal> listaAnimales = new ArrrayList<>();
 listaAnimales.add(. . .); listaAnimales.add(. . .);
Line 17: Line 16:
 listaAnimales.add(. . .); listaAnimales.add(. . .);
 Stream<Animal> streamAnimales = listaAnimales.stream(); Stream<Animal> streamAnimales = listaAnimales.stream();
-\end{lstlisting}+</code>
  
 También se pueden crear a partir de objetos de forma individual, sin partir de ninguna colección ya existente: También se pueden crear a partir de objetos de forma individual, sin partir de ninguna colección ya existente:
  
-\begin{lstlisting}[language=java]+<code java>
 Stream<String> streamNombres = Stream.of("Juan", "Francisco", "Ana", "María"); Stream<String> streamNombres = Stream.of("Juan", "Francisco", "Ana", "María");
-\end{lstlisting}+</code>
  
 Y también se puede crear un stream a partir de un array: Y también se puede crear un stream a partir de un array:
  
-\begin{lstlisting}[language=java]+<code java>
 String[] nombres = {"Juan", "Francisco", "Ana", "María"}; String[] nombres = {"Juan", "Francisco", "Ana", "María"};
 Stream<String> streamNombres = Stream.of(nombres); Stream<String> streamNombres = Stream.of(nombres);
-\end{lstlisting}+</code>
  
 ===== Operaciones intermedias ===== ===== Operaciones intermedias =====
Line 36: Line 35:
 Son aquellas operaciones que siempre acaban devolviendo el stream modificado. Son aquellas operaciones que siempre acaban devolviendo el stream modificado.
  
-\begin{itemize} +  * ''distinct()'': Devuelve un stream con los elementos distintos 
-    \item \textbf{distinct()}: Devuelve un stream con los elementos distintos +  * ''filter(Predicate<? super T> predicado)'': Devuelve un stream con los elementos que cumplen el filtro pasado como parámetro 
-    \item \textbf{filter(Predicate<? super T> predicado)}: Devuelve un stream con los elementos que cumplen el filtro pasado como parámetro +  * ''limit(long tamanoMaximo)'': Devuelve un stream con tantos elementos como el valor pasado como parámetro 
-    \item \textbf{limit(long tamanoMaximo)}: Devuelve un stream con tantos elementos como el valor pasado como parámetro +  * ''map(Function<? super T>, ? extends R> mapeador)'': Devuelve un stream cuyo elementos será el resultado de la operación realizada sobre los elementos del stream original 
-    \item \textbf{map(Function<? super T>, ? extends R> mapeador)}: Devuelve un stream cuyo elementos será el resultado de la operación +  * ''peek(Consumer<? super T> accion)'':  
-    realizada sobre los elementos del stream original +  * ''skip(long n)'': Elimina los \emph{n} primeros elementos y devuelve un stream con los restantes 
-    \item \textbf{peek(Consumer<? super T> accion)}:  +  * ''sorted(Comparator<? super T> comparador)'': Devuelve un stream ordenado según el comparador que se pasa como parámetro 
-    \item \textbf{skip(long n)}: Elimina los \emph{n} primeros elementos y devuelve un stream con los restantes +  * ''unordered()'': Devuelve un stream desordenado
-    \item \textbf{sorted(Comparator<? super T> comparador)}: Devuelve un stream ordenado según el comparador que se pasa como parámetro +
-    \item \textbf{unordered()}: Devuelve un stream desordenado +
-\end{itemize}+
  
 ===== Operaciones finales ===== ===== Operaciones finales =====
Line 52: Line 48:
 En este caso, son las operaciones que devuelven como resultado algo diferente que el propio stream. En este caso, son las operaciones que devuelven como resultado algo diferente que el propio stream.
  
-\begin{itemize} +  * ''boolean allMatch(Predicate<? super T> predicado)'': Comprueba si todos los elementos del stream cumplen el predicado 
-    \item \textbf{boolean allMatch(Predicate<? super T> predicado)}: Comprueba si todos los elementos del stream cumplen el predicado +  * ''boolean anyMatch(Predicate<? super T> predicado)'': Comprueba si algún elemento del stream cumple el predicado 
-    \item \textbf{boolean anyMatch(Predicate<? super T> predicado)}: Comprueba si algún elemento del stream cumple el predicado +  * ''boolean noneMatch(Predicate<? super T> predicado)'': Comprueba que ningún elemento del stream cumpla el predicado 
-    \item \textbf{boolean noneMatch(Predicate<? super T> predicado)}: Comprueba que ningún elemento del stream cumpla el predicado +  * ''Optional<T> findAny()'': Devuelve un elemento cualquier del stream 
-    \item \textbf{Optional<T> findAny()}: Devuelve un elemento cualquier del stream +  * ''Optional<T> findFirst()'': Devuelve el primer elemento del stream 
-    \item \textbf{Optional<T> findFirst()}: Devuelve el primer elemento del stream +  * ''R collect(Collector<? super T,A,R> colector)'': Devuelve el stream como un tipo colección 
-    \item \textbf{R collect(Collector<? super T,A,R> colector)}: Devuelve el stream como un tipo colección +  * ''long count()'': Devuelve el número de elementos del stream 
-    \item \textbf{long count()}: Devuelve el número de elementos del stream +  * ''void forEach(Consumer<? super T> accion)'': Permite ejecutar una operación sobre cada uno de los elementos del stream 
-    \item \textbf{void forEach(Consumer<? super T> accion)}: Permite ejecutar una operación sobre cada uno de los elementos del stream +  * ''void forEachOrdered(Consumer<? super T> accion)'': Permite ejecutar una operación sobre cada uno de los elementos del
-    \item \textbf{void forEachOrdered(Consumer<? super T> accion)}: Permite ejecutar una operación sobre cada uno de los elementos del+
     stream ordenado     stream ordenado
-    \item \textbf{Optional<T> max(Comparator<? super T> comparador)}: Devuelve el mayor de los elementos, según el comparador que se pasa+  * ''Optional<T> max(Comparator<? super T> comparador)'': Devuelve el mayor de los elementos, según el comparador que se pasa
     como parámetro     como parámetro
-    \item \textbf{Optional<T> min(Comparator<? super T> comparador)}: Devuelve el menor de los elementos, según el comparador que se pasa+  * ''Optional<T> min(Comparator<? super T> comparador)'': Devuelve el menor de los elementos, según el comparador que se pasa
     como parámetro     como parámetro
-    \item \textbf{Object[] toArray()}: Devuelve el stream como array de Objetos +  * ''Object[] toArray()'': Devuelve el stream como array de Objetos 
-    \item \textbf{Iterator<T> iterator()}: Devuelve el stream como un Iterator +  * ''Iterator<T> iterator()'': Devuelve el stream como un Iterator
-\end{itemize}+
  
 Veamos algunos ejemplos para la siguiente colección: Veamos algunos ejemplos para la siguiente colección:
  
-\begin{lstlisting}[language=java]+<code java>
 List<String> numeros = new ArrayList<>(); List<String> numeros = new ArrayList<>();
 numeros.add("uno"); numeros.add("uno");
Line 81: Line 75:
 numeros.add("cuatro"); numeros.add("cuatro");
 numeros.add("cinco"); numeros.add("cinco");
-\end{lstlisting}+</code>
  
-\begin{lstlisting}[language=java]+<code java>
 numeros.stream() numeros.stream()
     .filter(nombre -> nombre.startsWith("c"))     .filter(nombre -> nombre.startsWith("c"))
     .forEach(System.out::println);     .forEach(System.out::println);
-\end{lstlisting}+</code>
  
-\begin{verbatim}+<code java>
 cinco cinco
 cuatro cuatro
 cinco cinco
-\end{verbatim}+</code>
  
-\begin{lstlisting}[language=java]+<code java>
 numeros.stream() numeros.stream()
     .distinct()     .distinct()
     .filter(nombre -> nombre.startsWith("c"))     .filter(nombre -> nombre.startsWith("c"))
     .forEach(System.out::println);     .forEach(System.out::println);
-\end{lstlisting}+</code>
  
-\begin{verbatim}+<code java>
 cuatro cuatro
 cinco cinco
-\end{verbatim}+</code>
  
-\begin{lstlisting}[language=java]+<code java>
 numeros.stream() numeros.stream()
     .filter(nombre -> nombre.startsWith("c"))     .filter(nombre -> nombre.startsWith("c"))
     .peek(nombre -> System.out.println(nombre.length()))     .peek(nombre -> System.out.println(nombre.length()))
     .forEach(System.out::println);     .forEach(System.out::println);
-\end{lstlisting}+</code>
  
-\begin{verbatim}+<code>
 5 5
 cinco cinco
Line 121: Line 115:
 5 5
 cinco cinco
-\end{verbatim}+</code>
  
-\begin{lstlisting}[language=java]+<code java>
 numeros.stream() numeros.stream()
     .peek(nombre -> System.out.println(nombre.length()))     .peek(nombre -> System.out.println(nombre.length()))
     .filter(nombre -> nombre.startsWith("c"))     .filter(nombre -> nombre.startsWith("c"))
     .forEachOrdered(System.out::println);     .forEachOrdered(System.out::println);
-\end{lstlisting}+</code>
  
-\begin{verbatim}+<code java>
 3 3
 3 3
Line 140: Line 134:
 5 5
 cinco cinco
-\end{verbatim}+</code>
  
-\begin{lstlisting}[language=java]+<code java>
 Optional<String> primerNumero = numeros.stream().findAny(); Optional<String> primerNumero = numeros.stream().findAny();
 System.out.println(primerNumero.get()); System.out.println(primerNumero.get());
-\end{lstlisting}+</code>
  
-\begin{verbatim}+<code java>
 uno uno
-\end{verbatim}+</code>
  
-\begin{lstlisting}[language=java]+<code java>
 Optional<String> primerNumero = numeros.stream().findFirst(); Optional<String> primerNumero = numeros.stream().findFirst();
 System.out.println(primerNumero.get()); System.out.println(primerNumero.get());
-\end{lstlisting}+</code>
  
-\begin{verbatim}+<code java>
 uno uno
-\end{verbatim}+</code>
  
-\begin{lstlisting}[language=java]+<code java>
 // Orden no garantizado // Orden no garantizado
 numeros.stream().parallel().forEach(System.out::println); numeros.stream().parallel().forEach(System.out::println);
-\end{lstlisting}+</code>
  
-\begin{verbatim}+<code java>
 tres tres
 cinco cinco
Line 172: Line 166:
 cinco cinco
 uno uno
-\end{verbatim}+</code>
  
-\begin{lstlisting}[language=java]+<code java>
 // Orden garantizado // Orden garantizado
 numeros.stream().parallel().forEachOrdered(System.out::println); numeros.stream().parallel().forEachOrdered(System.out::println);
-\end{lstlisting}+</code>
  
-\begin{verbatim}+<code java>
 uno uno
 dos dos
Line 186: Line 180:
 cuatro cuatro
 cinco cinco
-\end{verbatim}+</code>
  
-\begin{lstlisting}[language=java]+<code java>
 Optional<String> primerNumero = numeros.stream().parallel().findAny(); Optional<String> primerNumero = numeros.stream().parallel().findAny();
-\end{lstlisting}+</code>
  
-\begin{verbatim}+<code java>
 tres tres
-\end{verbatim}+</code>
  
-\begin{lstlisting}[language=java]+<code java>
 List<String> numeros = numeros.stream() List<String> numeros = numeros.stream()
                             .sorted(Comparator.comparing(nombre::length)                             .sorted(Comparator.comparing(nombre::length)
                             .collect(Collectors.toList());                             .collect(Collectors.toList());
-\end{lstlisting}+</code>
  
---+----
  
-(c) 2021 - Santiago Faci+(c) 2021-2023 Santiago Faci
apuntes/streams.1634884286.txt.gz · Last modified: 2021/10/22 06:31 by Santiago Faci