El concepto de Java 8 Custom Stream es un concepto que en más de una ocasión necesitaremos abordar. En la programación más clásica de Java 8 utilizamos el método .stream() y convertimos una lista en un Stream de objetos . Sin embargo hay situaciones que no son tan directas y en las cuales necesitaremos construir nuestro propio stream desde cero. ¿Cómo podemos construir un Java 8 Custom Stream?.
Vamos a ver un ejemplo que se apoye en un ResultSet. El primer paso es crear un método que construya un ResultSet a partir de una conexión a base de datos
Veamos el código:
private static ResultSet crearResultSet() { ResultSet rs = null; String cadenaConexion = "jdbc:mysql://localhost:3306/curso?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC"; try { Connection conexion = DriverManager.getConnection(cadenaConexion, "root", "root"); Statement sentencia = conexion.createStatement(); rs = sentencia.executeQuery("select * from persona"); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return rs; }
Java 8 Custom Stream
Este método nos devuelve un ResultSet con el cual podemos trabajar de la forma clásica. Sin embargo vamos a utilizar otro método que nos permita convertir el ResultSet en un Stream.
Veamos el código que usa un Stream Builder (design pattern)
public static Stream<Persona> crearStream(ResultSet rs) throws SQLException { Stream.Builder<Persona> builder = Stream.builder(); while (rs.next()) { Persona persona = convertirFila(rs); builder.add(persona); } return builder.build(); }
En este método estamos convirtiendo un ResultSet a un Stream invocando el método next() y creando un Stream.Builder. El Stream.Builder dispone de un método add que añade los objetos al futuro Stream. Por último invocamos al método build() y el nuevo Stream se genera El Stream Builder se apoya en un sencillo método que convierte la fila del ResultSet en un objeto Persona.
public static Persona convertirFila(ResultSet rs) throws SQLException { return new Persona(rs.getString("nombre"), rs.getString("apellidos"), rs.getInt("edad") ); }
Una vez tenemos todos los métodos construidos es momento de construir el método main que se encarga de usar el Stream e imprimirlo por la consola.
public static void main(String[] args) { try { Stream<Persona> stream=crearStream(crearResultSet()); stream .map(p->p.getNombre()) .forEach(System.out::println); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
Acabamos de construir un Stream desde cero .En este caso para probar el Java 8 custom Stream nos estamos apoyando en el método map imprimiendo el nombre. El resultado se muestra en la consola.
Otros artículos relacionados:
- Java Stream Sum y Business Objects
- Java Stream Context y simplificación de Streams
- Java Stream Filter y Predicates
- Programación Funcional, Java 8 Streams
- Utilizando un JPA Stream con JPA 2.2
- Java Stream map y estadísticas
Estoy tratando de escribir en un archivo .json los datos de una tabla mysql. No sé que está incorrecto en mi código. El código de conecta a la base de datos y me trae un arreglo json. Cuando escribo en el navegador http://localhost:8085/Json3/testjson.jsp aparece correctamente la información en la pantalla. Esto es lo que se muestra. Está ok. [{“Nombre”:”Nancy”,”Cargo”:”Sales Representative”,”Empresa”:”Northwind Traders”},{“Nombre”:”Andrew”,”Cargo”:”Vice President, Sales”,”Empresa”:”Northwind Traders”},{“Nombre”:”Jan”,”Cargo”:”Sales Representative”,”Empresa”:”Northwind Traders”},{“Nombre”:”Mariya”,”Cargo”:”Sales Representative”,”Empresa”:”Northwind Traders”},{“Nombre”:”Steven”,”Cargo”:”Sales Manager”,”Empresa”:”Northwind Traders”},{“Nombre”:”Michael”,”Cargo”:”Sales Representative”,”Empresa”:”Northwind Traders”},{“Nombre”:”Robert”,”Cargo”:”Sales Representative”,”Empresa”:”Northwind Traders”},{“Nombre”:”Laura”,”Cargo”:”Sales Coordinator”,”Empresa”:”Northwind Traders”},{“Nombre”:”Anne”,”Cargo”:”Sales Representative”,”Empresa”:”Northwind Traders”},{“Nombre”:”Alex”,”Cargo”:”ing.”,”Empresa”:”acme”}] Pero necesito crear un archivo .json. Estoy trabajando con Netbeans. Dentro de la estructura que tengo se encuentra lo siguiente: Json3 (este… Read more »
Has realizado alguna operacion de flush y cerrado los recursos?