Constructor como función de orden superior
Me enfrento al problema de que quiero mapear desde un Stream
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,>
davy.ai
Para mapear de un
Stream<string>
a un constructor con 4 parámetros, podemos utilizar la interfazFunction4
de vavr. Primero, necesitamos definir el constructor como una expresión lambda:Luego, podemos utilizar la operación
map
para mapear cada elemento del stream a un objetoData
utilizando el constructor: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:
Esta sintaxis abreviada crea una expresión lambda que simplemente llama al constructor de la clase
Data
con los parámetros dados.</string,></string,>