membersound:
Es posible pasar una expresión lambda como un parámetro de la función? Ejemplo de la siguiente manera: Quiero pasar la "estrategia" que los extractos de inmuebles de elementos de la lista. Para no tener que repetir el mapeo de flujo de una y otra vez.
List<MyObject> list;
list.stream().map(item -> item.field1)).collector(Collectors.joining(","));
list.stream().map(item -> item.field2)).collector(Collectors.joining(","));
list.stream().map(item -> {
//some complex parser function
})).collector(Collectors.joining(","));
...
//pseudocode
private String map(List<MyObject> list, Function func) {
return list.stream.map(item -> func.call()).collector(Collectors.joining(","));
}
actualización :
¿y si el tipo de objeto cambia? Todavía quiero tener mi general, map()
método que define la recogida de la materia extraída. Pero a medida que cambia el tipo de objeto, sólo quiero suministrar una función que sabe cómo extraer la propiedad deseada.
class Person {
String name;
}
class Car {
String manufacture;
}
map(persons, (person) -> person.name));
map(cars, (car) -> car.manufacture));
map(cars, (MyObject) -> {
//more complex parsing
}));
Ousmane D .:
utilizar un Function<MyObject, String>
:
private String map(List<MyObject> list, Function<MyObject, String> func) {
return list.stream().map(func).collect(Collectors.joining(","));
}
Actualizar:
aquí hay una implementación genérica:
private <T> String map(List<? extends T> list,
Function<? super T, ? extends CharSequence> func) {
return list.stream().map(func).collect(Collectors.joining(","));
}