logo

Java 8 - Streams

En este código ir a GitHub vamos a ver una de las evoluciones mas importantes de Java 8, los streams.

A la hora de trabajar con colecciones, los desarrolladores tenemos que estar constantemente trabajando con bucles y condicionales. Java 8 simplifica y hace mas eficiente el trabajo con colecciones al incorporar una nueva abstracción denominada stream.

El código disponible en GitHub está suficientemente documentado para que se entienda sin demasiadas complicaciones. En el se ven ejemplos de :

  • forEach(). Método para iterar cada elemento de una secuencia.
  • map(). El método 'map' se utiliza para asignar cada elemento a su resultado correspondiente
  • filter(). Este método se utiliza para eliminar elementos basados en un criterio.
  • limit(). Este método se utiliza para reducir el tamaño de la colección
  • sorted(). Como su nombre indica, se utiliza para ordenar la colección
  • parallelStream(). parallelStream es la alternativa de stream para el procesamiento paralelo
  • collect(). Se utiliza para combinar el resultado del procesamiento en los elementos de una colección.

También, se introducen recopiladores de estadísticas IntSummaryStatistics para calcular todas las estadísticas cuando se realiza el procesamiento de secuencias.

El código Java
TestStream.java

package com.wanchopi.stream;

import java.util.Arrays;
import java.util.Comparator;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;

public class TestStream {
  
  static List<String> nombres = Arrays.asList("oscar", "maria", "eva", "alvaro", "catalina", "juan");
  static List<Integer> numeros = Arrays.asList(32, 1, 100, 45, 34, 100, 2, 8, 2);
  static IntSummaryStatistics stats = numeros.stream().mapToInt((x) ->x).summaryStatistics();

  public static void main(String[] args) {
    
    System.out.println( "Lista de nombres " + nombres );
    
    System.out.println( "\tEn mayúsculas " + nombres.stream().map(String::toUpperCase).collect(Collectors.toList()) );
    
    System.out.println( "\tOrdenados " + nombres.stream().sorted().collect(Collectors.toList()) );
    
    Predicate<String> predicate = string -> string.length() > 3;
    System.out.println( "\tDe nás de tres letras " + nombres.stream().filter(predicate).collect(Collectors.toList()) );
    
    System.out.println( "\tHay " + nombres.stream().filter(predicate).count() + " nombres de mas de tres letras" );
    
    predicate = string -> string.length() < 5;
    System.out.println( "\tDe menos de cinco letras " + nombres.stream().filter(predicate).collect(Collectors.toList()) );
    
    predicate = string -> !string.isEmpty();
    System.out.println( "\tSin corchetes " + nombres.stream().filter(predicate).collect(Collectors.joining(", ")) );
    
    System.out.println("====================================");
    
    System.out.println( "Lista de números " + numeros );
    
    System.out.println( "\tSin repetidos " + numeros.stream().distinct().collect(Collectors.toList()) );
    
    System.out.println( "\tOrdenados " + numeros.stream().sorted().collect(Collectors.toList()) );
    
    System.out.println( "\tOrdenados de mayor a menor y sin repeticiones " + 
        numeros.stream().distinct().sorted(Comparator.reverseOrder()).collect(Collectors.toList()));
    
    System.out.println( "\nCuadrado de los números " + 
        numeros.stream().distinct().map(n -> n*n).collect(Collectors.toList()) );
    
    System.out.println("====================================");
    
    System.out.println( "\tNúmero menor " + stats.getMin() );
    
    System.out.println( "\tNúmero mayor " + stats.getMax() );
    
    System.out.println( "\tSuma de todos los números " + stats.getSum()) ;
    
    System.out.println( "\tMedía de todos los números " + stats.getAverage() );
  }

}              
            

Herramientas y Software

  • Java SE-1.8 (jdk1.8.0)
  • Eclipse 2019-03
anterior

Librería commons-io

siguiente

Librería Gson (JSON)