es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Constructor como función de orden superior

Me enfrento al problema de que quiero mapear desde un Stream de 4 elementos hacia el constructor del registro Data:

record Data(String firstname, String middlename, String lastname, String zip) {}

La función de orden superior Function4<string, string,=”” string,=”” string,=”” data=””> constructor = Data::new;
List data = Stream.of(“chris”, “p”, “bacon”, “black”)
.map(constructor)
.collect(Collectors.toList())

Encontré una función de orden superior compatible (Function4 de Vavr) para describir este constructor con al menos 4 parámetros. Pero no puedo entender cómo usarlo en este caso.

Nota adicional: lo que intento evitar es construir una colección de 4 elementos y tener que pasarlos “manualmente”:

List<data> datas = rowData.stream()
                .map(row -> new Data(row.get(0), row.get(1), row.get(2), row.get(3))).toList();

Creo que esto no se puede hacer en Java porque en algún punto de la secuencia tengo que construir un tipo con una aridad de 4 parámetros.</string,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para mapear de un Stream<string> a un constructor con 4 parámetros, podemos utilizar la interfaz Function4 de vavr. Primero, necesitamos definir el constructor como una expresión lambda:

    Function4<string, string,="" string,="" string,="" data=""> constructor = (firstName, middleName, lastName, zip) -> new Data(firstName, middleName, lastName, zip);
    

    Luego, podemos utilizar la operación map para mapear cada elemento del stream a un objeto Data utilizando el constructor:

    List<data> data = Stream.of("chris", "p", "bacon", "black")
                            .map(constructor)
                            .collect(Collectors.toList());
    

    Este código creará una lista que contiene un único objeto Data con los valores dados para el nombre, segundo nombre, apellido y código postal.

    Cabe destacar que también podríamos definir el constructor como una referencia de método:

    Function4<string, string,="" string,="" string,="" data=""> constructor = Data::new;
    

    Esta sintaxis abreviada crea una expresión lambda que simplemente llama al constructor de la clase Data con los parámetros dados.</string,></string,>

Comments are closed.